回 帖 发 新 帖 刷新版面

主题:[讨论]求助:C#引用非托管DLL问题,若结构体中含有数组

[em18]
C#引用非托管DLL问题,若结构体中含有数组

[StructLayout(LayoutKind.Sequential)] 
public struct CAN_PACKET   //若为PRIVATE则出错,因为外部需要访问此类型

                    
    public uint CAN_ID;   // CAN ID field 优先级[8],帧号[3]
    public byte rtr;    // CAN RTR bit
    public byte len;
    public byte []data;             // Used only if baudrate = 4
    public uint time;
    public byte reserved;

}    

[DllImport("7841.dll")]
public static extern int CanRcvMsg(int handle,ref CAN_PACKET packet);
 

CAN_PACKET [] rcvMsg=new CAN_PACKET[300];
rcvMsg[rcvPatterns].data=new byte[8];  
 err = CanRcvMsg(handle[1], ref rcvMsg[rcvPatterns]);//调用封装的DLL函数,含有数组的结构体作为参数
                
                

编译没有问题,就是运行中出现“未将对象引用设置到对象的实例“。不知道大家遇到过这种没有,
这种做法正确吗?请大家指教,谢谢了

回复列表 (共3个回复)

沙发

rcvMsg[rcvPatterns].data=new byte[8]; 好像有点问题,你跟踪一下看看rcvMsg中哪个是NULL

板凳

是不是掉了点东西?

3 楼

数组中的对象好象还没实例化吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册