c#调用c++的dll 参数有函数指针 20

别人提供的c++dll里面有类型定义:typedefint(*RCVDATA)(char*cCardBuf,char*cIp);有函数定义intSetRecvProcAd... 别人提供的c++ dll
里面有类型定义:
typedef int (* RCVDATA)(char* cCardBuf, char* cIp);
有函数定义
int SetRecvProcAddr(RCVDATA RcvAddr);

这个地方的作用是注册回调函数,让dll需要的时候调用上层的函数。

cCardBuf和cIp是输出参数,都是以0结尾的字符串,长度未知,而且在dll中分配,由dll释放,上层无需预分配空间。
我在c#中要怎么调用呢
首先,函数指针怎么传;其次,我的回调函数怎么定义,两个字符串参数我用什么类型
最好直接能给出例子代码,拜托各位高手了,没啥分,各位担待
展开
 我来答
bear1200
2015-07-25 · TA获得超过383个赞
知道小有建树答主
回答量:755
采纳率:0%
帮助的人:478万
展开全部
你这个功能,做好用c++实现,因为c#是托管代码,给不出RCVDATA RcvAddr这个函数指针来给c++调用。

也就是说,你得写个c++的dll实现该功能,然后用c#加载你自己的c++ dll。 怎么调用dll方法网上有,不贴了。
追问
不是说c#里面的delegate可以实现回调的功能么,只是这个地方我不清楚怎么用
追答
typedef int (* RCVDATA)(char* cCardBuf, char* cIp); 根据你的意思,两个char*是char*&吧?

试试传递这个

public class DelegateTest
{
// 声明delegate对象
public delegate static int RcvAddr(out IntPtr cCardBuf, out IntPtr cCardBuf)
{
// xxxxxxx;
}
}
匿名用户
2015-07-25
展开全部
public class RefComm
{
[DllImport("MyServerDLL.dll",
EntryPoint = "Connecter",
CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void Connecter(int ServerPort,void(* pF)(char* buf,char* ClientIP,int ClientPort));
}
追问
这个不对啊,能直接这样么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式