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

huangweibuct 2009-09-24 04:17:07
我上午发的帖解决了一部分问题,现在问题如下:
c++接口函数原型为:

void Connecter(int ServerPort,void(* pF)(char* buf,char* ClientIP,int ClientPort));


我这样写的c#调用:

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。请高手帮我写下这段代码。谢了,在线等
...全文
199 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangghhdd 2009-09-24
  • 打赏
  • 举报
回复
谢谢分享,学习
huangweicsu 2009-09-24
  • 打赏
  • 举报
回复
学习,顶
huangweibuct 2009-09-24
  • 打赏
  • 举报
回复
huangweibuct 2009-09-24
  • 打赏
  • 举报
回复
在线等
huangweibuct 2009-09-24
  • 打赏
  • 举报
回复
自己顶一下

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧