2012-09-24 6 views
3

C# .NET 메서드를 호출하는 타사 응용 프로그램 용 플러그인이 있는데이 호출 응용 프로그램에서 인스턴스를 가져와야합니다. 호출 응용 프로그램에서 인스턴스를 얻는 방법

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

응용 프로그램에서 나에게 활성 인스턴스를 제공하지만, 경우에 내가 바로 하나를 가지고 있다면 알 수없는 응용 프로그램이 열려있는 경우가있다,라고 누가 결정하는 방법은 무엇입니까?

답변

1

매개 변수로 MapInfo에서 IDispatchID를 사용하여 객체 포인터를 전달 System.Runtime.InteropServices.Marshal.GetObjectForIUnknown 방법을 사용

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)); 
    } 
} 
+0

감사합니다! 정확히 내가 필요로하는 것. – user613068