C#中调用C++函数 句柄问题

shulei521 2011-12-02 03:03:56

C++原型
BOOL __stdcall Open (HANDLE *handle,DWORD CardId);




C#对应类型
[DllImport("USB.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern bool Open(ref IntPtr intptr, Byte CardId);


函数正常运行,但是问题出现了。

这里的 ref IntPtr intptr 每次打开后,intptr 这个值 一直在改变。
C++中 handle 的值是固定不变的。
...全文
416 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdl2005lyx 2011-12-04
  • 打赏
  • 举报
回复
改成这样:

[DllImport("USB.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
[return : MarshalAs( UnmanagedType.Bool)]//4 字节布尔值(true != 0、false = 0)。这是 Win32 BOOL 类型。
public static extern bool Open(IntPtr intptr, uint CardId);

shulei521 2011-12-02
  • 打赏
  • 举报
回复
求高手
mjp1234airen4385 2011-12-02
  • 打赏
  • 举报
回复
IntPtr 或者 IntPtr* 就行,不要使用ref 的。

110,525

社区成员

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

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

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