如何从调用应用程序中获取实例

3
我有一个针对第三方应用程序的插件,它调用了一个C#.NET方法,我需要从调用应用程序获取实例。
_MapInfoApplication = (MapInfo.MapInfoApplication) System.Runtime.InteropServices.Marshal.GetActiveObject("Mapinfo.application");

从应用程序中为我提供一个活动实例,但是在应用程序有两个打开的实例的情况下,我无法知道我是否得到了正确的实例,是否有方法确定是谁调用了它?

1个回答

1
使用 System.Runtime.InteropServices.Marshal.GetObjectForIUnknown 方法,通过将来自 MapInfoIDispatchID 作为参数传递对象指针:
public static void MINote(int MIWindowID, string Message)
{
   System.IntPtr MIDispatchPtr = new IntPtr(MIWindowID);
   DMapInfo MIConnection = (DMapInfo)Marshal.GetObjectForIUnknown(MIDispatchPtr);
   MIConnection.Do(String.Format("Note \"Note from CSharp: {0}\"",Message));
   DMBApplications Applications = (DMBApplications) MIConnection.MBApplications;
   foreach (DMapBasicApplication mbApp in Applications) 
   {
      MIConnection.Do(String.Format("Note \"MB App. running in this MapInfo instance: {0}\"", mbApp.Name));
   } 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接