我有一个与Cisco服务器(UCCX)通信的umanaged C++ DLL。

它通过TCP/IP与该服务器之间收发消息。现在,它接收到某些类型的消息,其中包含一些需要发送到C#GUI的参数,这些参数将在屏幕上显示这些参数。

请告诉我一种从此DLL触发C#事件的有效方法。

最佳答案

http://blogs.msdn.com/b/davidnotario/archive/2006/01/13/512436.aspx似乎回答了您的问题。您在C#端使用委托(delegate),在C++端使用标准回调。

C++方面:

typedef void (__stdcall *PFN_MYCALLBACK)();
int __stdcall MyUnmanagedApi(PFN_ MYCALLBACK callback);

C#面
public delegate void MyCallback();
[DllImport("MYDLL.DLL")] public static extern void MyUnmanagedApi(MyCallback callback);

public static void Main()
{
  MyUnmanagedApi(
    delegate()
    {
      Console.WriteLine("Called back by unmanaged side");
    }
   );
}

10-04 13:23