Marshal.GetActiveObject从C ++ / CLI抛出错误但不是C#

时间:2010-02-18 21:56:25

标签: c# com c++-cli rhapsody

我试图通过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工作?

1 个答案:

答案 0 :(得分:2)

C ++ / CLI中的main()例程是否标有[STAThread]?这通常是必需的,特别是在处理COM对象时。

[STAThread]
int main(array<System::String^>^args)
{
     // code here...
}