2012-07-27 2 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는 적절한 등록 데이터가없는 레지스트리를 의미합니다.

관련 문제