두 가지 응용 프로그램이 있습니다. 첫 번째 응용 프로그램은 RunningObjectTable ..에 ProgID가있는 개체를 등록합니다. 이는 정상적으로 작동합니다. 다른 응용 프로그램은 ProgID에 의해 해당 개체에 액세스해야합니다.RunningObjectTable (C#)의 개체 액세스
나는 3 가지 가능한 방법을 찾았습니다. 그러나 하나만 작동하고 왜 그런지 궁금합니다.이 두 가지 방법의 차이점은 무엇입니까?
첫째 : 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);
세 번째 방법은 ROT를 전혀 사용하지 않고 새로운 인스턴스를 만듭니다. GetObject()에 의해 반환 된 오류 또는 예외에주의를 기울이지 않으면 "작동하지 않는 이유"를 알 수 없습니다. Roman은 irotview 유틸리티에서 사용할 수있는 훌륭한 대체품을 만들었습니다. http://alax.info/blog/1444 –