如何通过引用将字节数组从c#传递到c++; 我使用了C++中的函数。.dll是部分文档化的,创建它是为了从结果数据库中读取结果。该函数具有以下签名: cdb_get(int index, int kwh, int kwl, void *s, int *ls, int nrew);
在许多情况下,我知道我正在读取的数据的结构,因此我可以创建一个具有正确格式的结构,并使用常规pInvoke读取它 但是在某些情况下,我需要知道数据的第一个字节,以确定正确的数据类型。理想情况下,我希望将数据读入字节数组,然后将其进一步转换为所需的结构。我想这样做:如何通过引用将字节数组从c#传递到c++; 我使用了C++中的函数。.dll是部分文档化的,创建它是为了从结果数据库中读取结果。该函数具有以下签名: cdb_get(int index, int kwh, int kwl, void *s, int *ls, int nrew);,c#,c++,interop,marshalling,C#,C++,Interop,Marshalling,在许多情况下,我知道我正在读取的数据的结构,因此我可以创建一个具有正确格式的结构,并使用常规pInvoke读取它 但是在某些情况下,我需要知道数据的第一个字节,以确定正确的数据类型。理想情况下,我希望将数据读入字节数组,然后将其进一步转换为所需的结构。我想这样做: [DllImport("name_of_dll", CallingConvention = CallingConvention.Cdecl)] public static extern int cdb_get( int inde
[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);
非常感谢您的帮助。我无法发表评论,所以我写在这里。
您的问题似乎也是如此,它可能会对您有所帮助。您可以获得指向非托管数据的指针。答案可能会有帮助。在链接的例子中,一个已知大小的C数组被传递给C++方法。我想通过引用传递一个数组,C++方法将数据存储在数组中,并传递回C。我想问题是,需要事先知道数组的大小才能分配内存,并且需要传递信息。