2010-03-15 2 views
2

VB 6에서 생성 된 COM DLL을 사용하는 .NET 2 C# 응용 프로그램을 개발 중입니다. VB DLL은 자주 내 응용 프로그램이 System.Runtime.InteropServices.COMException (0x80040154)과 충돌하여 업데이트됩니다. 사용하는 COM DLL의 부분은 변경되지 않지만 버전 (및 CLSID)은 변경됩니다.C#에서 COM의 느슨한 결합 또는 COMException을 피하는 방법 0x80040154

참조에 대한 "특정 버전"옵션은 false입니다. WrapperTool은 tlbimp입니다.

응용 프로그램에서 DLL의 변경 사항을 염려하지 않으려면 어떻게해야합니까? 내가 사용하고있는 기능 만 검사 할 수있는 방법이 있습니까?

+0

이 코드는 다른 곳에서 사용했습니다 : // 맨 위 창의 참조를 반환합니다. [DllImport ("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern IntPtr GetActiveWindow(); 유일한 답입니까? –

답변

2

가장 일반적인 COM 오류 중 하나 인 "클래스가 등록되지 않았습니다." 그것은 VB6에서 시작합니다. 바이너리 호환성을 제어하는 ​​옵션이 있습니다. 나는 그 모양이 정확히 잊어 버렸고, 너무 길었습니다. 이 제어하지 않으면 VB6 다른 CLSID 값이있는 새 COM 서버를 만들 것입니다. Regsvr32.exe를 사용하여 DLL을 다시 등록해야합니다. Tlbimp.exe로 interop 라이브러리를 다시 생성하십시오. 후자의 단계는 아마도 당신이 놓친 단계 일 것입니다.

다른 CLSID 값을 사용하는 것은 COM에 대해 어려운 요구 사항이므로 공용 인터페이스가 변경 될 때 이어야합니다. 그러나 구현 만 변경 될 때가 아닙니다.

+0

감사합니다. 최신 COM DLL이 등록되었습니다. 나는 또한 CLSID가 변경되지 않았다는 것을 알아 냈다. –

+0

오류로 인해 다른 이야기가 나옵니다. –

+0

미안 미스터 버그 즈. 나는 항상 그리워하는 단계, Tlbimp.exe 단계를 놓쳤다. IDE (SharpDevelop)는 컴파일 할 때이를 호출해야합니다. –