2012-04-19 4 views
0

VB.NET 2010에서 COM DLL을 쓰고 있습니다 (DLL A라고 부름). 이 DLL은 기존 DLL (DLL B)의 함수를 사용합니다. VS2010의 테스트 응용 프로그램에서 코드를 실행하면 모든 것이 잘 작동합니다.다른 COM DLL 호출로 VB.NET 호출 COM DLL 오류

(테스트 APP) -> (DLL A) -> (DLL의 B)

가 지금은 (VB6에서) 실제 APP에서 DLL A와 참조를 추가

(실제 APP) -> (DLL A) -> (DLL의 B)

... 그리고이 오류를 얻을

일반 'Object.class를을'인터페이스 타입 '시스템 .__하여 ComObject'의 COM 개체를 캐스팅 할 수 없습니다 . 다음 오류로 인해 IID '{GUID}'인터페이스에 대한 COM 구성 요소의 QueryInterface 호출이 실패했기 때문에이 작업이 실패했습니다. 해당 인터페이스가 지원되지 않습니다 (HRESULT의 예외 : 0x80004002 (E_NOINTERFACE)).

DLL A는 초기화되지만 DLL B에 대한 참조가있는 함수를 호출하자마자 오류가 발생합니다.

HELP!

+0

x86/x64 또는 둘 모두를 사용하고 있습니까? – rekire

+0

DLL B도 .NET 기반인가요? 아니면 구식 COM입니까? – rskar

답변

1

.NET DLL을 배포하고 COM (VB6)과 함께 사용하려면 어셈블리와 함께 "RegASM"을 사용하여 등록해야합니다. GAC 폴더 이외에 등록 할 때는/codebase 스위치를 포함시켜야합니다.

/codebase 스위치를 사용하면 strong-name 어셈블리 여야합니다.

+0

RegAsm을 등록하려면 +1해야합니다. 그러나 GAC (일반적으로 기본 interop 어셈블리)에 넣지 않으면 강력한 이름을 지정할 필요가 없습니다. dll을 응용 프로그램에서 사용하기위한 비공개 어셈블리로 배포하는 경우 RegAsm/codebase를 사용하고 서명에 대한 경고는 무시하십시오. – tcarvin