将方法指针作为整数参数发送到C#的C 方法
Sending a method pointer as a integer parameter to a C++ method from 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#
中做同样的事情的方式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);
相关文章:
- c++方法参数只能在linux的发布模式下自行更改
- 使用移动语义:右值引用作为方法参数
- 无法将动态创建的对象数组从 qml 发送到 c++ 作为方法参数
- 将方法参数类型更改为子类中的派生类
- ofstream作为C 中的方法参数
- 使用 gmock 匹配器将 std::function 设置为 EXPECT_CALL 中的方法参数
- C com 方法参数扣除
- 获取非静态方法参数计数
- 使用 gmock 返回模拟方法参数
- 运行 QML 时出现"未知方法参数类型"错误
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- 将C 方法参数转换为模板参数会因编译错误而失败
- 如何在方法参数中使用boost :: asio :: buffer
- qsharedPointer作为方法参数或方法的返回值的良好实践
- 如何将方法指针声明为Typedef方法参数
- 方法参数中的 OpenCV 垫"预期")""
- 方法参数中的 consst* 常量
- 带有“class”详细类型说明符的方法参数
- 具有原始方法参数派生类的 C++ 重载方法参数
- C++ std::string length() 或 size() 不适用于方法参数