将字节数组从 c++ 传递到 c#(单声道)
Posted
技术标签:
【中文标题】将字节数组从 c++ 传递到 c#(单声道)【英文标题】:Passing byte array from c++ to c# (mono) 【发布时间】:2018-03-09 18:25:40 【问题描述】:我想将字节数组/向量/缓冲区从 c++ 传递到 c#
在 c++ 方面,我将在向量中包含一些数据:
std::vector<unsigned char> pixels_cpp;
在 c# 端,我想以字节数组的形式访问这些数据,例如
byte[] pixels_cs
// or as a MemoryStream object, accompanied with size information.
我目前正在使用这个概念将字符串从 c++ 传递到 c#:
void MyWrapper::setSomeString(const std::string& someString)
mono_thread_attach (mono_get_root_domain ());
MonoMethod* mmSetSomeString = searchMethod("SetSomeString", monoClass);
void *args [1];
args [0] = mono_string_new (domain, someString.c_str());
MonoObject *result = mono_runtime_invoke (mmSetSomeString, CsClassInstance, args, NULL);
// check result
而调用的c#签名是:
public bool SetSomeString(string someString)
如果我想传递一个字节向量,这会是什么样子?
如何分配内存并用来自 pixel_cpp 的数据填充它? 如何使用 mono_runtime_invoke(或等效项)调用调用? c# 方法签名应该是什么样子?【问题讨论】:
【参考方案1】:解决方案是使用 mono_array_new。 示例:
void MyWrapper::setVector(std::vector<uint8_t>& data)
mono_thread_attach (mono_get_root_domain ());
MonoMethod* mmSetVector = searchMethod("SetVector", monoClass);
void *args [1];
MonoArray *data = mono_array_new(domain, mono_get_byte_class(), data.size());
for (auto i=0; i<data.size(); i++)
mono_array_set (data, uint8_t, i, data[i]);
args [0] = data;
MonoObject *result = mono_runtime_invoke (mmSetVector, CsClassInstance, args, NULL);
// check result
【讨论】:
以上是关于将字节数组从 c++ 传递到 c#(单声道)的主要内容,如果未能解决你的问题,请参考以下文章
将字节数组从 c++ 传递到 c# 程序集都有哪些不同的方法?
将字节数组从 C# 传递到 C++ DLL 作为 char*