私は最後に不可能になるかもしれない何かを試しています。私が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:Register
とCreateClassMoniker
を使ってみましたが、2番目のアプリでROTからオブジェクトにアクセスしようとすると、別の失敗に直面しています。
私のSTA DLLが適切に登録されており、マーシャリングのためにtypelibを使用しています(これも登録されています)。
何か不足していますか、まったくできないようにしようとしていますか?後者の場合、私のための簡単な選択肢はありますか?