代码之家  ›  专栏  ›  技术社区  ›  user3729611

将字节数组从c++传递到c#(单声道)

  •  3
  • user3729611  · 技术社区  · 7 年前

    在c++方面,我将在向量中包含一些数据:

    std::vector<unsigned char> pixels_cpp;
    

    在c端,我想访问字节数组中的这些数据,例如。

    byte[] pixels_cs
    // or as a MemoryStream object, accompanied with size information.
    

    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)
    

    如果我想传递一个字节向量,这看起来像什么?

    • 如何分配内存并用pixels\u cpp中的数据填充内存?
    • 如何使用mono\u runtime\u invoke(或等效工具)调用调用?
    • c方法签名应该是什么样子?
    1 回复  |  直到 7 年前
        1
  •  1
  •   user3729611    4 年前

    解决方案是使用mono\u array\u 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
    }