繁体   English   中英

如何通过引用从 c# 到 c++ 传递字节数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM