문제

나는이 문제를 오랫동안 해결하려고 노력해 왔으며 아무것도 효과가없는 것 같습니다.

vb6로 작성된 com dll이 있습니다. .NET 에서이 DLL에 대한 참조를 추가하고 '분리 된'및 '로컬'속성을 참조에서 true로 설정합니다. 분명히 이것은 reg-free com을 활성화해야합니다.

그러나 그것은 작동하지 않습니다. 다른 컴퓨터에서 시도하거나 regsvr32로 DLL을 등록하지 않으면 DLL에 액세스하려고 시도하면 예외가 발생합니다 (본질적으로 원하는 COM 클래스가 존재하지 않음). DLL 및 매니페스트 파일은 EXE와 동일한 폴더에 있지만 분명히 완전히 무시합니다.

내가 뭘 잘못하고 있죠? 나는 이것에 대해 많은 흩어진 기사를 읽었지만 그중 어느 것도 나에게 작동하는 솔루션을 제공하지 않습니다. 나는 Visual Studio를 사용하여 아무 소용이 없었다. 나는 Make-My-Manifest로 소량을 땜질했지만 (테스트 프로젝트에서도) 작동하지 않았습니다.

도움이 되었습니까?

해결책

비 UI 스레드에서 COM 클래스를 만들고 사용하고있었습니다. vb6 dlls의 reg-free com은 그 상황에서는 효과가 없습니다. 이 테스트 코드는 다음을 보여줍니다.

Private Sub RunTest() Handles Button1.Click
    Try
        Dim x As New RegTestProject.RegTestCall
        MsgBox(x.RegTestFunction())
    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

Private Sub RunThreadedTest() Handles Button2.Click
    'fails if reg-free COM is used'
    Dim t As New Threading.Thread(AddressOf RunTest)
    t.Start()
End Sub

정상적으로 등록 된 DLL으로 이것을 실행하면 두 테스트 모두 성공합니다. Reg-Free Com을 사용하면 정상 테스트가 여전히 성공하더라도 스레드 테스트가 실패합니다. 이것이 일자리에 큰 고통이 될 것 같습니다.

다른 팁

이런 방식으로 COM 구성 요소를 참조 할 때 COM 구성 요소 가져 오기가 빌드 할 때마다 발생한다고 확신합니다. 즉, COM 구성 요소는 프로젝트가 구축 될 모든 컴퓨터에 기존 방식으로 등록되어야합니다.

여기에 있습니다 링크 이는 등록 무료 COM 인터 로프 사용을 설명합니다. 이미이 작업을 수행했다면 매니페스트 파일을 게시하십시오. 오타가 누락 될 수 있습니다.

편집하다

앱이 새 시스템에서 처음 실행될 때 DLL을 등록하는 것이 더 간단 할 수 있습니다. 등록 무료 COM Interopt는 Windows XP에서만 제공되므로 최신 정보를 제공하므로 공룡을 타겟팅하면 작동하지 않습니다.

여기에서 발췌 한 내용이 있습니다 문제 해결 MSDN의 섹션 기사 reg-free com에서. 이미 본 경우 사과드립니다. 좋은 소식은 당신이 이미 단계를 통과하는 길의 일부라는 것입니다. Windows Server 2003에서 문제를 재현 할 것을 제안합니다 (아마도 가상 PC그런 다음 이벤트 로그가 도움이됩니다.

먼저 ... 등록 된 서버로 작업하는 클라이언트; 그런 다음 서버를 등록하고 오류 메시지가 예상 한 것인지 확인하십시오. 그리고 마지막으로 ... 공예와 배포 매니페스트 파일. 이런 식으로 문제 해결 노력은 ... 매니페스트 파일의 구조 (및 조립품의 올바른 임베딩을 선택하면 매니페스트)에 국한됩니다.

등록이없는 COM 문제 문제 해결, Windows Server 2003의 이벤트 뷰어 친구입니다 ... COM 서버의 이벤트를 위해 시스템 이벤트 로그를 찾으십시오. Windows XP 이벤트 로그를 보는 것을 제안하지는 않습니다. 메시지가 항상 포함되어 있습니다. 문제를 식별하는 데 도움이되지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top