私は2つのアプリケーションを持っています。最初のアプリケーションは、完全に正常に動作するRunningObjectTable ..にProgIDを持つオブジェクトを登録します。他のアプリケーションは、ProgIDによってそのオブジェクトにアクセスする必要があります。RunningObjectTable(C#)のオブジェクトへのアクセス
私は3つの可能な方法を見つけました..しかし、ただ1つしか動作せず、なぜ私はこれらの方法の違いがありますか?
まず:IRunningObjectTable.GetObject(...) =>動作しない
IRunningObjectTable rot;
GetRunningObjectTable(0, out rot); // => ole32.dll
IMoniker moniker;
CreateFileMoniker("myProgId", out moniker); // => ole32.dll
object myObj;
rot.GetObject(moniker, out myObj) // => myObj stays null
第二:Marshal.GetActiveObject(...) =>動作しない
object myObj = Marshal.GetActiveObject("myProgId"); // => throws an exception: MK_E_UNAVAILABLE
サード:Activator.CreateInstance(...)は=> ROTの
object myObj = Activator.CreateInstance(Type.GetTypeFromProgID("myProgId"), true);
3番目の方法ではROTをまったく使用しないため、新しいインスタンスが作成されます。 GetObject()によって返されたエラーまたは例外に注意を払わない場合は、「動作しない」理由を知ることができません。 Romanは、irotviewユーティリティのためのかなり良い代替品を作った:http://alax.info/blog/1444 –