2011-01-14 7 views
0

interop 어셈블리가있는 타사 DLL을 사용해야하는 VB.Net 프로젝트가 있습니다. 내가 프로젝트에 직접 상호 운용성에 대한 참조를 추가하는 시도어셈블리가 VS10 개체 브라우저에 나열되지 않았습니다.

Hummingbird.DM.Server.Interop.PCDClient.dll 
PCDClient.dll 

,하지만 오류를 등록하지 않는 COM을받은 파일을 실행에 : 그래서 이런 식으로 뭔가가있다.

gacutil /if "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

regasm "C:\....\Hummingbird.DM.Server.Interop.PCDClient.dll" 

심지어 VS를 다시 시작한 후, 어셈블리가 계속 표시되지 않습니다 :

그래서 나는 다음과 같이 상호 운용성을 등록했습니다.

답변

1

regasm 명령이 COM 서버의 레지스트리 키를 삭제했습니다. 다시 설치해야합니다. 자신의 [ComVisible] 코드에서만 regasm을 사용하십시오.

올바르게 설치되지 않은 구성 요소를 사용하는 데 문제가있는 한 가지 이유는 64 비트 운영 체제에서이 구성 요소를 실행하려고하기 때문입니다. 그리고이 구성 요소는 가장 일반적인 경우 인 32 비트입니다. 앱을 사용하려면 앱을 32 비트 모드로 실행해야합니다. VB.NET IDE에서는 Project + Properties, Compile 탭, 아래로 스크롤, 고급 컴파일 옵션, 대상 CPU를 "x86"으로 설정합니다.

이와 같은 문제에 대한 궁극적 인 문제 해결 도구는 SysInternals 'ProcMon 유틸리티입니다. COM이 HKLM \ Software \ Classes \ CLSID 키를 사용하여로드 할 DLL을 검색하는 방법을 보여줍니다.

+0

그래서 내가 GACUTIL 만 사용해야한다고 말하는 것입니까? "regasm/u ..."를 사용하여 등록을 취소 한 다음 "gacutil/if ..."로 충분합니까? 내 시스템은 Win XP 32Bit입니다. – udeleng

+0

이 COM 서버는 관리 코드가 될 가능성이 적습니다. 내가 말했듯이, regasm을 실행하면 COM 서버의 레지스트리 키를 덮어 썼습니다. 다시 설치해야합니다. Regsvr32를 * 관리되지 않는 * DLL (interop 라이브러리가 아님)에서 사용하는 것이 가능성이 높습니다. 문제가 더있는 경우 공급 업체의 지원을 요청하십시오. –

+0

"regsvr32 PCDClient.dll"을 사용했습니다 (interop은 여전히 ​​GAC에 있고, 필요한지 확실하지 않습니다). 이제 Interop.PCDCLIENTLib가 개체 브라우저에 나열되어 있습니다. 당신은 내가 사용해야하는 단계가 있음을 확인할 수 있습니다 gacutil/경우 "C : \ ... \ Hummingbird.DM.Server.Interop.PCDClient.dll" 에 regsvr32 "C : \ ... \ PCDClient. dll " – udeleng

0

interop을 등록하고 있지만 COM DLL을 등록하지 않았습니다 (오류 메시지에 나와있는 것처럼). 이것을 시도하십시오 :

regsvr32 pdcclient.dll