我有一个非托管库。我想使用非托管库创建一个C#应用程序。我正在使用' DllImport'从非托管库导入函数。
在C ++中,调用结构的结构和函数如下所示
typedef struct _DATA_BUFFER {
UCHAR *buffer; // variable length array
UINT32 length; // lenght of the array
UINT32 transferCount;
} DATA_BUFFER,*P_DATA_BUFFER;
byte Write (HANDLE handle, DATA_CONFIG *dataConfig, DATA_BUFFER *writeBuffer, UINT32 Timeout);
在C#中我定义了结构和功能,如下所示
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct DATA_BUFFER
{
public byte* buffer;
public UInt32 length;
public UInt32 transfercount;
};
[DllImport("Library.dll")]
public unsafe static extern byte Write([In] IntPtr hHandle, DATA_CONFIG* dataConfig, DATA_BUFFER* WriteBuffer, UInt32 timeout);
for (byte i = 0; i < length; i++)
transfer[i] = i;
DATA_BUFFER buffer_user = new DATA_BUFFER();
buffer_user.length = length;
buffer_user.buffer = transfer;
return_status = Write(handle , &dataconfig , &buffer_user , 1000);
我收到错误&#39;无法将类型byte []转换为byte。
我尝试使用固定和其他。没有什么工作。
如何将数组(在本例中为Tranfer [])分配给结构中的指针(公共字节*缓冲区)。我需要把它传递给上面提到的函数吗?
答案 0 :(得分:1)
您的结构DATA_BUFFER
使用byte *缓冲区。但我猜你明白这个错误。
尝试
fixed (byte* b = transfer) buffer_user.buffer = b;
当然在unsafe
上下文中。