[英]How can I pass a byte array by reference from c# to c++
我正在使用来自 ZD7EFA19FBE7D3972FD5ADB6024223 内的 c++.dll 的 function。 .dll 已部分记录,创建它是为了从结果数据库中读取结果。 function 具有以下签名:
cdb_get(int index, int kwh, int kwl, void *s, int *ls, int nrew);
在许多情况下,我知道我正在读取的数据的结构,因此我可以创建一个具有正确格式的结构并使用常规 pInvoke 读取它。
但是在某些情况下,我需要知道数据的第一个字节才能确定正确的数据类型。 理想情况下,我希望将数据读入字节数组,然后将其进一步转换为我需要的结构。 我想做这样的事情:
[DllImport("name_of_dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int cdb_get(
int index,
int kwh,
int kwl,
ref byte[] data,
ref int dataLen,
int pos);
但这似乎不起作用(理论上应该吗?)。 有没有办法让它与字节数组一起工作并通过引用传递它?
到目前为止,我正在通过使用 IntPtr 然后手动编组来解决它。 我需要猜测指针的大小,我想这是不可避免的吗? 有没有不同的方法来处理编组?
IntPtr data = Marshal.AllocHGlobal(128);
int size = 128;
int returnValue = cdbGet(index, kwh, kwl, data, ref size, 1);
byteArray = new byte[size];
Marshal.Copy(data, byteArray, 0, size);
Marshal.FreeHGlobal(data);
任何帮助表示赞赏,非常感谢。
我不能发表评论,所以我在这里写。 这似乎与您的问题相同,它可能会对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.