我在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);
这绝对不行,我不知道下一步该尝试什么。有任何想法吗?谢谢!
答案 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
。