c# 调用C++dll内的函数 C++结构体指针对应C#什么类型
1.设备为CAN总线
2.使用产家提供的DLL操作CAN总线
3.其DLL是c++写的
dll内定义
- C/C++ code
typedef struct _CANFRAME { UCHAR mFrame[10]; }CANFRAME,*PCANFRAME;
dll内的函数:
BOOL _stdcall Pci6621_Send(int mDev,int mPort,PCANFRAME pSendFrame);
用途:
用于PCI6621通讯端口的发送数据帧;
返回参数:
返回值为BOOL返回TRUE表示发送成功,FALSE表示发送失败;
调用参数:
mDev32位int设备序号。取值为范围0-3; 现在填0
nPort32位int端口序号。取值为范围0-1; 现在填0
pSendFrame数据帧指针 这里需要什么类型数据
[解决办法]
new byte[10]就行
[解决办法]
- C# code
[DllImport("你的DLL路径")]public static extern int Pci6621_Send(int mDev, int mPort, byte[] pSendFrame);
[解决办法]
需要一个CANFRAME结构的指针(引用)
- C# code
[StructLayout(LayoutKind.Sequential)] public struct CANFRAME { [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 10)] public byte[] mFrame; } public class LibWrap { [DllImport("MyDll.dll")] public static extern bool Pci6621_Send([In] Int32 mDev, [In] Int32 mPort, ref CANFRAME pSendFrame); } static void Main() { CANFRAME sendFrame = new CANFRAME(); sendFrame.mFrame = new byte[10]; //sendFrame.mFrame[0] = 0x01; //... bool bSuccess = LibWrap.Pci6621_Send(0, 0, ref sendFrame); }
[解决办法]
楼上办法可行,给你一个更全面的:
http://blog.csdn.net/sdl2005lyx/article/details/6801113
[解决办法]
ref 结构体名
结构体自己定义