将方法指针作为整数参数从 C# 发送到 C++ 方法

Sending a method pointer as a integer parameter to a C++ method from C#

我正在尝试从 C++ dll 调用一个方法,该方法获取一个 JSON 字符串作为参数。 json 格式字符串中嵌入的参数之一是一个无符号整数,它表示回调函数的地址,该回调函数在调用该方法时应被调用。这是它在 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# 中执行相同操作的方法

Delegate callbackDelegate = new Action<int, IntPtr, ulong, int, int>(messageCallback);
IntPtr p = Marshal.GetFunctionPointerForDelegate(callbackDelegate);
string s = Converter.Serialize(new loginRequest() { Arg = new ArgParam() { IP = "10.0.0.121", PORT = 7020, CALLBACK = (uint)p } });
JScmd(s);

问题是当我尝试在 C# 中做同样的事情时,它没有工作,我在这一行得到了一个错误

Marshal.GetFunctionPointerForDelegate

上面写着

The specified Type must not be a generic type definition

如果您有任何解决此问题的建议,请告诉我。

试试这个:

public delegate void MyDelegate(int i, IntPtr j, ulong k, int l, int m);
...
MyDelegate callbackDelegate = new MyDelegate(messageCallback);
IntPtr p = Marshal.GetFunctionPointerForDelegate(callbackDelegate);