我有两个应用程序。第一个应用程序在 RunningObjectTable.. 中使用 ProgID 注册了一个对象,它工作得很好。其他应用程序应通过 ProgID 访问该对象。
我找到了三种可能的方法……但只有一种有效,我想知道为什么……这些方法之间有什么区别?
首先: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(...) => 有效
object myObj = Activator.CreateInstance(Type.GetTypeFromProgID("myProgId"), true);