【发布时间】:2021-08-14 18:35:04
【问题描述】:
我的 C# 代码中有一个 byte[],我需要将它传递给 C++ 端并用来自 void* 的数据填充它
我是这样做的
C#端
byte[] copy;
m_Logic.CopyToArray(out copy);
//There is filled `copy` that I can use
C++ (CLI) 端
void Agent_CLI::CopyToArray([Out] array<unsigned char> ^% input)
{
std::vector<int> data = { 1, 2, 3, 4 };
void * data_to_copy = data.data(); //TEST : my data to copy
int data_size = (int)data.size();
input = gcnew array<unsigned char>(data_size);
memcpy(&input[0], data_to_copy, data_size * sizeof(unsigned char));
}
但我得到了错误
错误 C2664: 'void *memcpy(void *,const void *,::size_t)': 无法将参数 1 从 'cli::interior_ptr' 转换为 'void *'
我做错了什么?
【问题讨论】:
-
输入缓冲区和输出缓冲区交换了吗?
-
@jdweng 我不确定我是否明白你的想法......我没有输出缓冲区,只需输入一个。无论如何,您为什么认为应该交换它们?
-
你需要两个缓冲区。
-
如果不固定数组对象就不能使用 memcpy(),请使用
pin_ptr<>。但是在这里更容易使用Marshal::Copy()。