2012-07-27 3 views
1

COM DLL을 unmanged C++로 작성하고 VS 2010으로 컴파일했습니다. regsvr32를 사용하여 DLL을 등록 할 수 있으며 VBscript를 통해 호출 할 수 있습니다.tlbimp는 어떤 Visual Studio IDE를 사용합니까?

C# 클라이언트를 만드는 동안 참조를 추가하려고하면 참조 추가 -> COM 탭에 나열된 COM 개체가 표시되지 않습니다. DLL을 수동으로 찾아서 선택하려고하면 DLL이 유효한 assemlby 또는 COM 구성 요소가 아니라고 표시됩니다.

이제 tlbimp 도구를 사용하여 interop DLL을 생성하고이를 사용하여 내 C# 클라이언트에 대한 참조로 추가 할 수 있습니다. 모든 것이 잘 작동합니다.

내 질문은 : 그것은에 regsvr32를 통해 등록 때 원래 COM은 참조 추가 대화 상자에서 COM 탭에 나열되지 않은 이유는

  1. ?
  2. VBScript 및 C++ 기본 코드에서 호출 할 수있는 경우 VS IDE에서 올바른 COM이 아니라고 생각하는 이유는 무엇입니까?
  3. tlbimp가 IDE에서 할 수없는 것은 무엇입니까?
  4. 유형 라이브러리 및 상호 운용성에 대한 이해를 높이려면 여기를 더 읽고 싶습니다.

답변

2

형식 라이브러리 문제 인 것처럼 보입니다. COM 클래스가 올바르게 등록되었지만 귀하의 typelib이 아닌 것 같습니다. 어쩌면 당신은 DllRegisterServer 함수 내에서 RegisterTypeLib을 호출하는 것을 잊었을까요?

질문에 대한 참조 :

  1. 대화는하지 COM 클래스

  2. VBScript를이의 IDispatch를 호출하고 타입 라이브러리에 대해 상관하지 않는다 위해 등록 된 타입 라이브러리를 찾습니다. tlbimp는 IDispatch를 신경 쓰지 않으며 형식 라이브러리가 필요하지 않습니다.

  3. DLL 이름을 tlbimp에 전달 했으므로 tlbimp는 typelib을 유지하는 방법을 알고있었습니다. 대조적으로, VS는 적절한 등록 데이터가없는 레지스트리를 의미합니다.