现在做一个项目,需要用到别人写好的一个dll文件中的函数,dll文件中函数的定义如下:
BOOL HKCanInitState(
        PHKCANHANDLE mDevHandle, 
        int     nPort, 
        UINT     CAN_bps,
        UCHAR CAN_StationAddress,
        UCHAR CAN_Mask, 
        HANDLE mRxEvent
        )
mDevHandle为一个结构体指针,如下:
typedef struct _HKCANHANDLE {
HANDLE  mHandle;
DWORD   mGuid;
WORD     mClass;
WORD     mDev;
WORD     mType;
WORD     mState;
}HKCANHANDLE,*PHKCANHANDLE我对函数的引用如下:
        [DllImport("HKCANDLL.dll", EntryPoint = "HKCanGetBDVersion", CallingConvention = CallingConvention.Cdecl)]
        public static extern int InitState(ref HKCANHANDLE mDevHandle, int nPort, uint CAN_bps, byte CAN_StationAddress, byte CAN_Mask, IntPtr mRxEvent);        public struct HKCANHANDLE 
        {
            
            public IntPtr mHandle;  //设备句柄  
              public UInt32 mGuid;    //设备标志 
              public UInt16 mClass;   //设备类型    
              public UInt16 mDev;     //设备数量
              public UInt16 mType;      
              public UInt16 mState;     
        }
调用如下:
IntPtr ptr = (IntPtr)null;
InitState(ref m_HKCanHandle, 0, 21295, 0, 255, ptr );这一句执行以后,总是提示“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”,不知如何处理。
m_HKCanHandle为HKCANHANDLE 类型的变量,前面已经取得此值。高手指点一下,困扰好几天啦,在线等。