读书人

c# 调用C++dll内的函数 C++结构体指针

发布时间: 2012-03-28 15:40:03 作者: rapoo

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 结构体名
结构体自己定义

读书人网 >C#

热点推荐