从C ++非托管DLL传递C#函数

时间:2014-01-20 15:30:28

标签: c# c++ marshalling unmanaged

我有带C ++ DLL接口的设备,我应该创建C#类来控制它。我没有问题(dis)连接到这个设备,但我无法获得读取功能:

界面中的功能定义是:

bool Driver_Read(int DeviceNo, unsigned char *pReadBuf, unsigned long ReadLen, unsigned long *pReadLen)

我做了som研究,我发现这段代码应该有效:

[DllImport("..\\..\\..\\..\\Driver.dll")]
public static extern bool Driver_Read(int deviceNo, StringBuilder pReadBuf, ulong readLen, ref UInt32 pReadLen);

但是当我运行它时,我得到一个AccessViolationException:"尝试读取或写入受保护的内存。这通常表明其他内存已损坏。"

很多人都有类似的问题,但没有什么对我有帮助。 你知道吗,问题出在哪里?提前谢谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

[DllImport("..\\..\\..\\..\\Driver.dll")]
public static extern bool Driver_Read(int DeviceNo, IntPtr pReadBuf, uint ReadLen, ref uint pReadLen)

这应该有助于从C ++到C#的类型转换:
http://msdn.microsoft.com/en-us/library/ac7ay120(v=vs.110).aspx