C# 将方法指针作为整数参数发送到C++;来自C的方法# 我试图从C++ DLL调用一个方法,它得到一个JSON字符串作为参数。json格式字符串中嵌入的一个参数是一个无符号int,它表示回调函数的地址,在调用方法时应该调用回调函数。下面是如何在c++中调用它: Json::Value jsval; jsval["cmd"] = "logon"; jsval["Arg"]["IP"] = szIP; jsval["Arg"]["PORT"] = nPort; jsval["Arg"]["CALLBACK"] = (unsigned int)TheMsgCallback; Json::FastWriter writer; std::string sender = writer.write(jsval); JScmd((char*)sender.c_str())
下面是我如何在C中尝试做同样的事情#C# 将方法指针作为整数参数发送到C++;来自C的方法# 我试图从C++ DLL调用一个方法,它得到一个JSON字符串作为参数。json格式字符串中嵌入的一个参数是一个无符号int,它表示回调函数的地址,在调用方法时应该调用回调函数。下面是如何在c++中调用它: Json::Value jsval; jsval["cmd"] = "logon"; jsval["Arg"]["IP"] = szIP; jsval["Arg"]["PORT"] = nPort; jsval["Arg"]["CALLBACK"] = (unsigned int)TheMsgCallback; Json::FastWriter writer; std::string sender = writer.write(jsval); JScmd((char*)sender.c_str()),c#,c++,pointers,interop,marshalling,C#,C++,Pointers,Interop,Marshalling,下面是我如何在C中尝试做同样的事情# Delegate callbackDelegate=新操作(messageCallback); IntPtr p=Marshal.GetFunctionPointerForDelegate(callbackDelegate); 字符串s=Converter.Serialize(new loginRequest(){Arg=new ArgParam(){IP=“10.0.0.121”,PORT=7020,CALLBACK=(uint)p}); JScmd(s)
Delegate callbackDelegate=新操作(messageCallback);
IntPtr p=Marshal.GetFunctionPointerForDelegate(callbackDelegate);
字符串s=Converter.Serialize(new loginRequest(){Arg=new ArgParam(){IP=“10.0.0.121”,PORT=7020,CALLBACK=(uint)p});
JScmd(s);
问题是,当我试图在C#中做同样的事情时,它不起作用,我在这条线上遇到了一个错误
Marshal.GetFunctionPointerForDelegate
上面说
指定的类型不能是泛型类型定义
如果您有任何解决此问题的建议,请告诉我。尝试以下方法:
public delegate void MyDelegate(int i, IntPtr j, ulong k, int l, int m);
...
MyDelegate callbackDelegate = new MyDelegate(messageCallback);
IntPtr p = Marshal.GetFunctionPointerForDelegate(callbackDelegate);
public delegate void MyDelegate(int i, IntPtr j, ulong k, int l, int m);
...
MyDelegate callbackDelegate = new MyDelegate(messageCallback);
IntPtr p = Marshal.GetFunctionPointerForDelegate(callbackDelegate);