我试图通过COM访问正在运行的应用程序实例Rational Rhapsody。我正在尝试使用C ++ / CLI COM调用 来自C ++调用:
rhapsody::RPApplication^ App = safe_cast<rhapsody::RPApplication^>( Marshal::GetActiveObject("Rhapsody.Application"));
导致COM异常:800401E3(操作不可用)
但是,使用Marshal::GetActiveObject("Word.Application")
工作正常。使用gcnew rhapsody::RPApplication()
可以很好地在C#中创建一个新实例和相同的代码:
rhapsody.RPApplication App = (rhapsody.RPApplication) Marshal.GetActiveObject("Rhapsody.Application")
工作得很好。 任何想法为什么它不能从C ++ / CLI工作?
答案 0 :(得分:2)
C ++ / CLI中的main()例程是否标有[STAThread]
?这通常是必需的,特别是在处理COM对象时。
[STAThread]
int main(array<System::String^>^args)
{
// code here...
}