Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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++ 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)

下面是我如何在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);
问题是,当我试图在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);