2012-02-07 9 views
1

私は最後に不可能になるかもしれない何かを試しています。私がCOMの土地にいてからずっとずっと続いています。別のプロセスからSTAオブジェクトにアクセスする際の問題

2つのアプリケーションとCOM STA DLLを考えてみましょう。最初のアプリケーションはCOM STA DLLをプラグインとしてロードし、このDLLは2番目のアプリケーションが見るように "グローバルに"登録しようとします。 GetObject("Excel.Application")のようなものです。

私は2つの方法を試しました(これは同じことに変わります)。

アプローチ1:CoRegisterClassObjectを使用してオブジェクトのSTAインスタンスを登録しようとしました。この呼び出しは、S_OKで成功します。しかし、CoRegisterClassObjectの直後に同じCLSIDを使用してGetActiveObjectを試してみると、MK_E_UNAVAILABLE - 0x800401e3となります。

GetActiveObjectは間違ったAPIですか?そうでない場合、なぜ失敗するのでしょうか?

アプローチ2:私もGetRunningObjectTable,IRunningObjectTable:RegisterCreateClassMonikerを使ってみましたが、2番目のアプリでROTからオブジェクトにアクセスしようとすると、別の失敗に直面しています。

私のSTA DLLが適切に登録されており、マーシャリングのためにtypelibを使用しています(これも登録されています)。

何か不足していますか、まったくできないようにしようとしていますか?後者の場合、私のための簡単な選択肢はありますか?

答えて

1

GetActiveObjectあなたのお友達がRegisterActiveObjectRevokeActiveObjectの場合は、使用すると思われます。私は完全にオフだった。それは今完璧に動作します!私はこれが誰かを助けることを望む。

関連する問題