今天编写了一个c++的动态库,需要回调c#的函数。 动态库里面c++的代码如: typedef long (CALLBACK *Logon_CallBackPtr)(LONG nType, const char* pToken); LOGON_LIB_API LONG Logon_CallBack(Logon_CallBackPtr fHandlerFunc); C#里面设置的方法如下: [DllImport("logon_lib.dll", EntryPoint = "Logon_CallBack")] public static extern int Logon_CallBack(Logon_CallBackPtr fHandlerFunc); C#回调方法的编码如下: public delegate int Logon_CallBackPtr(int n, string sToken); public int fDataArriveHandler(int nType, string sToken) { string msg = "未知命令"; switch( nType ) { case 1: msg = string.Format("权限变更:{0}", sToken); break; case 2: msg = string.Format("用户退出:{0}", sToken); break; } MessageBox.Show(msg); return 0; } c#设置回调方法如下: Logon_CallBackPtr dataArrive = new Logon_CallBackPtr( this.fDataArriveHandler); Logon_CallBack(dataArrive);