C#从C ++ DLL(进出)编组unsigned char *数组

时间:2015-01-22 19:54:45

标签: c# pinvoke marshalling dllimport

我在C#应用程序和现有C ++ DLL之间编组数据时遇到问题。使这个困难的警告是它是一个指向数组的unsigned char指针,我需要在C#中调用后访问数据(来自所有字段)。如果可能的话,我想避免使用不安全的代码。

这是C ++签名:

BYTE GetData(unsigned char *Data_Type, unsigned char *Data_Content, unsigned int *Data_Length);

我在C#中尝试了很多东西,但这就是我现在拥有的东西:

[DllImport("somecpp.dll")]
public static extern byte GetData([In][Out] ref byte Data_Type, [In][Out] ref byte[] Data_Content, [In][Out] ref int Data_Length);

然后调用它,我正在尝试这个:

byte retrievedData = GetData(ref data_type, ref data_content, ref data_length);

这绝对不行,我不知道下一步该尝试什么。有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您的ref byte[]参数与unsigned char**匹配。这是间接的一个层次太多了。

p / invoke应该是

[DllImport("somecpp.dll")]
public static extern byte GetData(
    ref byte Data_Type,
    [In,Out] byte[] Data_Content,
    ref uint Data_Length
);

该函数使用cdecl似乎是合理的。我们不能从这里说出来。

我还怀疑Data_Type参数应该是out而不是ref