如何在 C# 中从 C.dll 编组字节 *

How to marshall byte* from C.dll in C#

我尝试从 C# 调用两个具有相似签名的函数:

BOOL Read (BYTE Len, BYTE* DataBuf)
BOOL Write (BYTE Len, BYTE* DataBuf)

来自文档:DataBuf Destination of transmitted data

C#调用应该用什么?

还没有要测试的硬件,但我正在努力争取尽可能多的电话。

谢谢。

它可能是从 byte[] 数组中获得的 IntPtr。较早的问题肯定应该涵盖:How to get IntPtr from byte[] in 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 然后编组器作为优化,固定数组并传递固定对象的地址。这意味着不执行复制并且参数传递是高效的。