c#调用c++的DLL,接口函数参数有函数指针,在线等解决办法 20

c++接口函数原型为:C/C++codevoidConnecter(intServerPort,void(*pF)(char*buf,char*ClientIP,intC... 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。请高手帮我写下这段代码。谢了,在线等
展开
 我来答
贝杨甘会欣
2020-02-29 · TA获得超过1274个赞
知道小有建树答主
回答量:1682
采纳率:100%
帮助的人:7.7万
展开全部
你这个功能,做好用c++实现,因为c#是托管代码,给不出rcvdata
rcvaddr这个函数指针来给c++调用。
也就是说,你得写个c++的dll实现该功能,然后用c#加载你自己的c++
dll。
怎么调用dll方法网上有,不贴了。
歧震侨春冬
2020-09-14 · TA获得超过1097个赞
知道小有建树答主
回答量:1586
采纳率:81%
帮助的人:8万
展开全部
C#用委托做参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lichong8550336
2009-09-27
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
很简单的,首先选择项目,添加引用,就能像使用一个类使用dll中的类了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式