【发布时间】:2017-02-28 01:29:20
【问题描述】:
我正在尝试从 C++ dll 中调用一个方法,该方法将 JSON 字符串作为参数。嵌入在 json 格式字符串中的参数之一是 unsigned 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# 中做同样的事情时,它没有工作,我在这一行得到一个错误
Marshal.GetFunctionPointerForDelegate
上面写着
指定的 Type 不能是泛型类型定义
如果您有任何解决此问题的建议,请告诉我。
【问题讨论】:
标签: c# c++ pointers interop marshalling