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#中要怎么调用呢
首先,函数指针怎么传;其次,我的回调函数怎么定义,两个字符串参数我用什么类型
最好直接能给出例子代码,拜托各位高手了,没啥分,各位担待 展开
里面有类型定义:
typedef int (* RCVDATA)(char* cCardBuf, char* cIp);
有函数定义
int SetRecvProcAddr(RCVDATA RcvAddr);
这个地方的作用是注册回调函数,让dll需要的时候调用上层的函数。
cCardBuf和cIp是输出参数,都是以0结尾的字符串,长度未知,而且在dll中分配,由dll释放,上层无需预分配空间。
我在c#中要怎么调用呢
首先,函数指针怎么传;其次,我的回调函数怎么定义,两个字符串参数我用什么类型
最好直接能给出例子代码,拜托各位高手了,没啥分,各位担待 展开
2个回答
展开全部
你这个功能,做好用c++实现,因为c#是托管代码,给不出RCVDATA RcvAddr这个函数指针来给c++调用。
也就是说,你得写个c++的dll实现该功能,然后用c#加载你自己的c++ dll。 怎么调用dll方法网上有,不贴了。
也就是说,你得写个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));
}
{
[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));
}
追问
这个不对啊,能直接这样么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询