将数组传递给C#应用程序中的结构内的指针

时间:2014-07-23 18:15:20

标签: c#

我有一个非托管库。我想使用非托管库创建一个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 [])分配给结构中的指针(公共字节*缓冲区)。我需要把它传递给上面提到的函数吗?

1 个答案:

答案 0 :(得分:1)

您的结构DATA_BUFFER使用byte *缓冲区。但我猜你明白这个错误。

尝试

fixed (byte* b = transfer) buffer_user.buffer = b;

当然在unsafe上下文中。