Marshal.GetActiveObject генерирует ошибку из C ++ / CLI, но не из C # - PullRequest
1 голос
/ 19 февраля 2010

Я пытаюсь получить доступ к работающему экземпляру приложения, Rational Rhapsody, через COM.Я пытаюсь использовать COM-вызовы C ++ / CLI.
Из вызовов 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 Ответ

2 голосов
/ 19 февраля 2010

Ваша подпрограмма main () в C ++ / CLI помечена [STAThread]? Обычно это требуется, особенно при работе с COM-объектами.

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