我有我想从C#调用两个函数共享类似的特征:如何从C.dll在C#马歇尔字节*
BOOL Read (BYTE Len, BYTE* DataBuf)
BOOL Write (BYTE Len, BYTE* DataBuf)
从文件:传输的数据
的DATABUF目的地我应该在C#调用中使用什么?
- 的byte []
- myByteArr [0]
- 的P/Invoke助理建议System.IntPtr
不必的考验硬件,但我试图得到尽可能当我们有时,很多电话都是正确的。
谢谢。
我有我想从C#调用两个函数共享类似的特征:如何从C.dll在C#马歇尔字节*
BOOL Read (BYTE Len, BYTE* DataBuf)
BOOL Write (BYTE Len, BYTE* DataBuf)
从文件:传输的数据
的DATABUF目的地我应该在C#调用中使用什么?
不必的考验硬件,但我试图得到尽可能当我们有时,很多电话都是正确的。
谢谢。
对于读取功能使用:
[Out] byte[] buffer
对于写功能使用:
[In] byte[] buffer
[In]
是默认的,可以省略,但明确表示并不伤害。因此
的职能将是:
[DllImport(filename, CallingConvention = CallingConvention.Cdecl)]
static extern bool Read(byte len, [Out] byte[] buffer);
[DllImport(filename, CallingConvention = CallingConvention.Cdecl)]
static extern bool Write(byte len, [In] byte[] buffer);
很显然,你需要将它传递给非托管函数之前,数组分配。
因为byte
是blittable,编组人员作为一个优化,钉住数组并传递固定对象的地址。这意味着不执行复制并且参数传递是有效的。
它可能是IntPtr
从byte[]
阵列获得。旧的问题绝对应该已经覆盖认为:How to get IntPtr from byte[] in C#
我一直在使用 – user1957413