2011-05-04 3 views
1

관리되는 C++에서 대부분 작성된 내 Windows Forms 응용 프로그램 .NET4 응용 프로그램을 통해 연결할 수있는 ATL COM 서비스가 있습니다.관리되지 않는 C++ COM 및 관리되는 C++ .NET4 interop

(CoCreateInstance()를 통해) 인터페이스에 대한 포인터를 성공적으로 검색 할 수 있지만 이벤트 싱크를 구현할 때 문제가 발생합니다. COM 서버에 의해 정의 된 인터페이스를 구현하고 ConnectionPoint에서 이벤트를 수신하는 관리되지 않는 C++ 클래스를 응용 프로그램에 생성하려고합니다. 지금까지 얻은 것 :

  • 관리되는 (ref 클래스) C++ 클래스를 사용하여 실현할 수없는 일반적인 관리되지 않는 클래스를 사용하고 있습니다.
  • ATL 매크로를 사용할 수 없으므로 싱크 클래스에서 IUnknown 추상 함수 (AddRef, Release, QueryInterface 등)를 구현해야합니다.

인터페이스에 대한 IConnectionPoint 포인터를 검색 할 수 있지만 Advise()를 호출하면 E_NOTIMPL이 반환됩니다. 이것은 내가 어딘가에 ATL 기반 기능을 구현하지 못했다고 생각하게하지만 어디서부터 시작해야할지 모르겠습니다.

제쳐두고, 관리되는 C++ 프로젝트에서 COM을 사용하는 것에 관해서는 네트워크에서 거의 리소스를 찾지 못했습니다. 가장 가까운 곳은 this 기사입니다. 누구든지이 주제에 대해 좋은 책을 읽었습니까? 지금은 내 머리를 망가 뜨리고 있습니다.

답변

1

관리되는 C++ 응용 프로그램에서 "참조 추가"옵션을 사용하여 COM 서버에 대한 참조를 추가하면 관리되는 C++ 코드에서 사용할 수있는 COM 구성 요소의 관리되는 래퍼 (어셈블리) . COM 구성 요소의 이벤트는 관리되는 C++에서 일반 이벤트 처리를 사용하여 처리 할 수있는 .NET 이벤트로 사용할 수 있어야합니다.

당신의 설명을 보면 관리되지 않는 코드를 사용하여 관리되는 C++ 응용 프로그램에서 COM 구성 요소를 사용하려고하는 것으로 보입니다. 이는 복잡하게 만듭니다. 관리되는 코드와 관리되지 않는 코드를 혼합하는 것은 경계가 명확해야하며 경계를 넘나들며 점프하는 것은 복잡한 일이되고 다른 심각한 문제로 이어질 것입니다. 따라서 COM 구성 요소의 관리되는 래퍼를 만드는 "관리 코드"(C++) 만 사용하여 COM 구성 요소를 사용하는 것이 좋습니다.

+0

답장을 보내 주셔서 감사합니다. 당신 말이 맞아요, 관리되는 코드와 관리되지 않는 코드가 섞여 있다는 생각이 듭니다. '참조 추가'옵션은 어디에 있습니까? 그리고이 방법에 대한 문서에 대한 링크가 있습니까? –

+1

프로젝트를 마우스 오른쪽 버튼으로 클릭하면 참조가 추가됩니다. "COM"에 대한 탭이있는 대화 상자가 열리고 해당 탭이 열리고 시스템에 등록 된 모든 COM 구성 요소가 표시됩니다. 기본적으로 이것은 Tlbimp.exe의 맨 위에있는 IDE 기능입니다. COM 용 관리되는 래퍼를 만드는 데 사용되는 도구입니다. 참조 : http://msdn.microsoft.com/en-us/library/tt0cf3sx(VS.80).aspx – Ankur

관련 문제