C#调用C++dll问题 求解

shulei521 2011-12-02 09:06:45

C++原型

typedef struct RevPackage
{
BOOL TimeTag;
DWORD RevData;
}RevPack

void __stdcall ReceiveData(HANDLE USB,BYTE No, RevPack * Buffer);



对应到C#的代码

[StructLayout(LayoutKind.Sequential)]
public struct RevPack
{

public bool TimeTag;
public uint RevData;
}

[DllImport("USB.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern void ReceiveData(IntPtr USB, Byte No, ref RevPack Buffer);



问题描述:
1.在C++中数据接收正常。
2.在C#调用此方法后,数据接收不到。RevPack.RevData 一直处于等于0


头大 求高手
...全文
129 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdl2005lyx 2011-12-04
  • 打赏
  • 举报
回复
这样,你把C++中如何使用这个函数的代码贴出来,
同时,也把在C#中使用的代码也贴出来,帮你看看。。。
sdl2005lyx 2011-12-04
  • 打赏
  • 举报
回复
先把结构体改成:

[StructLayout(LayoutKind.Sequential)]
public struct RevPackage_STRUCT
{
[MarshalAs(UnmanagedType.Bool)]//4 字节布尔值(true != 0、false = 0)。这是 Win32 BOOL 类型。

public bool TimeTag;
public uint RevData;
}

shulei521 2011-12-03
  • 打赏
  • 举报
回复
一切都正常,DLL中其他函数的调用也正常,只有这个函数 调用 一直获取不到数据
josephSC 2011-12-03
  • 打赏
  • 举报
回复
你的dll成功加到reference了吗?
liuyh83 2011-12-03
  • 打赏
  • 举报
回复
结构和对象传递好像要用委托吧~
facelessvoidhj 2011-12-03
  • 打赏
  • 举报
回复
会不会跟数据类型有关?好像有的类型不能通用。
zhouxingyu896 2011-12-03
  • 打赏
  • 举报
回复
学习
学习
是啊,要不就是C++吧。
shulei521 2011-12-03
  • 打赏
  • 举报
回复
这个 不行啊
  • 打赏
  • 举报
回复
在c++中接收正常,就用c++去接收。

如果要做,找个c#开发人员来重新开发。

110,536

社区成员

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

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

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