gpt4 book ai didi

c++-cli - 将非托管数据复制到托管数组中

转载 作者:行者123 更新时间:2023-12-03 13:19:02 25 4
gpt4 key购买 nike

我需要使用 C++/CLI(数组)将 native (即非托管)数据(字节 *)复制到托管字节数组。

我试过 Marshal::Copy (数据由 const void* data 指向,是 dataSize 字节)

array<byte>^ _Data=gcnew array<byte>(dataSize);
System::Runtime::InteropServices::Marshal::Copy((byte*)data, _Data, 0, dataSize);

这会产生错误 C2665:16 个重载中没有一个可以转换所有参数。然后我尝试了
System::Runtime::InteropServices::Marshal::Copy(new IntPtr(data), _Data, 0, dataSize);

这会产生错误 C2664:参数 1 无法从“const void*”转换为“__w64 int”。

那么如何做到这一点,Marshal::Copy 确实是“最好”(最简单/最快)的方式吗?

最佳答案

所有这些答案都围绕着原始问题中的真正误解跳舞。犯的基本错误是这段代码:

System::Runtime::InteropServices::Marshal::Copy(new IntPtr(data), 
_Data,
0,
dataSize)

不正确..您没有新建(或 gcnew)IntPtr。它是一个值类型。其中一个答案表明了这一点,但并没有指出最初的误解。正确的代码可以这样表达:
System::Runtime::InteropServices::Marshal::Copy(IntPtr((void *)data), 
_Data,
0,
dataSize)

当我第一次开始使用这些结构时,这也让我感到困惑..

IntPtr 是一个 C# 结构.. 一个值类型。

关于c++-cli - 将非托管数据复制到托管数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6403005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com