3

C#.NET メソッドを呼び出すサードパーティ アプリケーション用のプラグインがあり、呼び出し元のアプリケーションからインスタンスを取得する必要があります。

_MapInfoApplication = (MapInfo.MapInfoApplication) System.Runtime.InteropServices.Marshal.GetActiveObject("Mapinfo.application");

アプリケーションからアクティブなインスタンスを取得しますが、アプリケーションのインスタンスが 2 つ開いている場合、正しいインスタンスを取得したかどうかわかりません。誰が呼び出したかを特定する方法はありますか?

4

1 に答える 1

1

メソッドを使用し、 fromをパラメーターとしてSystem.Runtime.InteropServices.Marshal.GetObjectForIUnknown使用してオブジェクト ポインターを渡します。IDispatchIDMapInfo

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));
   } 
}
于 2012-09-24T14:57:25.130 に答える