现在做一个项目,需要用到别人写好的一个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 类型的变量,前面已经取得此值。高手指点一下,困扰好几天啦,在线等。
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 类型的变量,前面已经取得此值。高手指点一下,困扰好几天啦,在线等。
解决方案 »
- ■■请教四年工作经验以上的前辈,如何整理学习资料
- 我如果在其他机器上装了.net freamwork 2.0,是不是我做的VS2005的程序就可以在别的机器上运行了啊
- C#中如何得到各类字体的宽度
- js判断服务器控件隐藏、显示
- 谁知道C#怎么做属性页啊,,就是像安装程序那样的,可以上一步,下一步的界面啊(在线等)
- 请问关于ADO.NET的问题
- 谢 eTopFancy(你的美丽我的回忆) 100分请进( 关于SESSION丢失问题的再次提问,散无比多分(500)就为了一个解决 )
- ASP.NET 的内置对象为什么不能用,急,在线等!!!
- 低级问题,为什么我在vs.net里面调试的时候报错说没有System.Data.SQL这个空间名称
- 谁能提供一些C#关于com编程的书或资源?
- 大家帮帮忙。谢谢。
- 如何改变ListView中某一个单元格的背景色
平台调用是相当麻烦的事。
建议你使用c++.net混合编程来屏蔽这个细节。
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxinterop/html/027832a2-9b43-4fd9-9b45-7f4196261a4e.htm
可能是DLL本身有问题吧