2010-02-18 2 views
1

COM을 통해 실행중인 응용 프로그램 인스턴스 인 Rational Rhapsody에 액세스하려고합니다. C++/CLI COM 호출을 사용하려고합니다. 잘 Marshal::GetActiveObject("Word.Application") 작품을 사용하여, 800401E3 (사용할 수없는 동작을)Marshal.GetActiveObject가 C++/CLI에서 오류를 throw하지만 C#이 아닙니다.

을하지만 :

rhapsody::RPApplication^ App = safe_cast<rhapsody::RPApplication^>(Marshal::GetActiveObject("Rhapsody.Application")); 

는 COM 예외가 발생합니다 : C에서
++ 호출.

rhapsody.RPApplication App = (rhapsody.RPApplication) Marshal.GetActiveObject("Rhapsody.Application") 

작품 잘 : gcnew rhapsody::RPApplication()를 사용하여 새로운 인스턴스 및 C#에서 동일한 코드를 만들기 위해 잘 작동합니다. C++/CLI에서 작동하지 않는 이유는 무엇입니까?

답변

2

C++/CLI의 main() 루틴에 [STAThread] 플래그가 지정되어 있습니까? 일반적으로 COM 개체를 처리 할 때 일반적으로 필요합니다.

+0

나는 다른 오류를 해결하기 위해 여기에 다른 게시물을 추가 했으므로 추가하려고 시도했지만 아무 것도 변경하지 않았습니다. – Zanson

+0

좋아, 나는 재미로 다시 시도했는데 어떤 이유로 지금은 작동한다. 위어드. – Zanson

+0

예. VB.NET 대신 C++/CLI 래퍼가있는 [Qt ComApp Example] (http://doc.qt.nokia.com/4.7-snapshot/activeqt-comapp.html)이 필요했습니다. – jetimms