c#调用c++的DLL,接口函数参数有函数指针,在线等解决办法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#调用c++的DLL,接口函数参数有函数指针,在线等解决办法相关的知识,希望对你有一定的参考价值。
c++接口函数原型为:
C/C++ code
void Connecter(int ServerPort,void(* pF)(char* buf,char* ClientIP,int ClientPort));
我这样写的c#调用:
C# code
public partial class Default
[DllImport("MyServerDLL.dll",
EntryPoint = "Connecter",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void Connecter(int ServerPort, IntPtr P);
public delegate void FunctionDelegate(IntPtr buf, IntPtr ClientIP, int ClientPort);
void Callback(IntPtr buf, IntPtr ClientIP, int ClientPort)
showLb.Text = buf.ToString();
。。。
protected void serverBtn_Click(object sender, EventArgs e)
//IntPtr intPtr = new IntPtr();----------------如果这样写,异常:值不能为空。参数名: ptr
//int nSizeOfCallback = Marshal.AllocHGlobal(Callback);-------------如果这样写,由于Callback是函数,所以不能Marshal.AllocHGlobal(Callback);
//IntPtr intPtr = Marshal.AllocHGlobal(nSizeOfCallback);-----我将nSizeOfCallback改为64注释掉上一行,试验一下,提示:指定结构必须能直接复制到本机结构中,或是具有布局信息。
参数名: structure
Marshal.StructureToPtr(new FunctionDelegate(Callback).Target, intPtr, true);
Connecter(5000, intPtr);
我没用过c#,所以不太知道这种情况下怎么调c++的DLL。请高手帮我写下这段代码。谢了,在线等
rcvaddr这个函数指针来给c++调用。
也就是说,你得写个c++的dll实现该功能,然后用c#加载你自己的c++
dll。
怎么调用dll方法网上有,不贴了。 参考技术A C#用委托做参数 参考技术B 很简单的,首先选择项目,添加引用,就能像使用一个类使用dll中的类了
以上是关于c#调用c++的DLL,接口函数参数有函数指针,在线等解决办法的主要内容,如果未能解决你的问题,请参考以下文章