那位 知道 c#在调用c++写的 dll动态链接库的时候,c++中有个函数的参数需要句柄为long型,不知道用c#如何调用,请高手指点以下

tiancs 2009-03-10 03:24:15
那位 知道 c#在调用c++写的 dll动态链接库的时候,c++中有个函数的参数需要句柄为long型,不知道用c#如何给c++API传参数才能调用,请高手指点以下

高分奖赏
...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomiyinerzhou 2009-05-13
  • 打赏
  • 举报
回复
使用IntPtr进行封送处理。 然后再使用Marshal类的方法获得需要的数据。


如果你还不明白怎么做,我推荐你阅读刚刚出版的新书:《精通.NET互操作P/Invoke,C++Interop和COM Interop》,这本书详细且系统地介绍了.NET互操作的三种主要技术:P/Invoke,C++ Interop和COM Interop,你需要的问题在第2章“数据封送”中能找到解答。


该书的官方网站:
www.interop123.com

豆瓣网信息:
http://www.douban.com/subject/3671497/
tiancs 2009-03-10
  • 打赏
  • 举报
回复
首先感谢你的帮助

还是不行 是不是 不能用panel控件或其他什么原因?
tweeger 2009-03-10
  • 打赏
  • 举报
回复
AVC_StartView函数的代码有吗?
如果有的话调试看看,传递的值可以修改为int类型的再试试;
AVC_StartView(t.Iconnect, panel.Handle.ToInt32(), 0, 0, 0, 0);
或者
unsafe { AVC_StartView(t.Iconnect, panel.Handle.ToPointer(), 0, 0, 0, 0); }
tiancs 2009-03-10
  • 打赏
  • 举报
回复
我就是这样传的 AVC_StartView(t.Iconnect, panel1.Handle, 0, 0, 0, 0);
结果 应该是 panel中接受的是摄像头中的视频 但这样传结果没有 我是在找不到原因
请大家帮帮忙
tweeger 2009-03-10
  • 打赏
  • 举报
回复
Panel panel = new Panel();
panel.Handle;
应该传递panel.Handle,这样也不行吗?
tiancs 2009-03-10
  • 打赏
  • 举报
回复
我试过 用IntPtr类型 因为我做的是 调用c++dll中的函数为其指定一个 容器如panel等作为视频的显示窗口

我用InPtr类型 到没有 报错的得不到图像
zgke 2009-03-10
  • 打赏
  • 举报
回复
C++的long 对应C#的 int32 如果是句柄那就是 IntPtr
mienfong 2009-03-10
  • 打赏
  • 举报
回复
MSDN的平台调用数据类型,給樓主參考。
http://msdn.microsoft.com/zh-cn/library/ac7ay120(VS.80).aspx
xianguang321 2009-03-10
  • 打赏
  • 举报
回复
一楼正解!
tweeger 2009-03-10
  • 打赏
  • 举报
回复
句柄类型一般使用c# IntPtr类型来对应。

111,126

社区成员

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

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

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