1

我正在尝试通过 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?

4

1 回答 1

2

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

[STAThread]
int main(array<System::String^>^args)
{
     // code here...
}
于 2010-02-18T21:59:32.513 回答