2015-07-11 49 views
1

我有我想从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

不必的考验硬件,但我试图得到尽可能当我们有时,很多电话都是正确的。

谢谢。

回答

2

对于读取功能使用:

[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,编组人员作为一个优化,钉住数组并传递固定对象的地址。这意味着不执行复制并且参数传递是有效的。

+0

我一直在使用 – user1957413