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

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

本文关键字:方法 参数 指针 整数      更新时间:2023-10-16

我正在尝试从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#

中做同样的事情的方式
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#中做同样的事情时,它不起作用,我在这条线上得到了一个ERRO

元帅。

指定类型不得是通用类型定义

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

尝试以下:

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