日期:2014-05-19  浏览次数:21073 次

C#调用dll 参数是结构体 的问题。
[DllImport( "APIHid.dll ")]
public   static   extern   Int16   TransmitAPDU(int   hic,   ref   APDUEx   apdu);

调用的时候是这样的。
TransmitAPDU(0,   ref   apdu);
TransimtAPDU会传出apdu结构,并且结构中的一个数组在函数中赋值。运行的时候到这一步总说我的
尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
是我从dll导入时,声明函数参数错误吗?应该怎么写才对?

ps:apdu是一个结构体,如下:
        public   struct   APDUEx
        {
                public   Byte   sendlen;
                public   Byte[]   sendbuf;
                public   Byte   recvlen;
                public   Byte[]   recvbuf;
        }




------解决方案--------------------
你这样试试:


[StructLayout(LayoutKind.Sequential)]
public struct myStru
{
string name;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=16)]
public byte[] bArr;
}