小编k92*_*256的帖子

从C++到C#的数组

我试图将一个双数组(它实际上是一个std :: vector,但在转换时转换)从c ++ dll传递到ac#script(unity).使用此处概述的方法/sf/answers/2199314281/.

我可以在我的控制台上成功地获得阵列打印的大小但是我无法使用"CoTaskMemAlloc"来为阵列分配内存,因为我使用Xcode并且它似乎没有COM.

对于更多背景,这个数组是GUI控件的一部分,c ++创建它并且用户使用c#GUI进行编辑 - 因此计划是在编辑时将数组传递回c ++.

C++ code
extern "C" ABA_API void getArray(long* len, double **data){
    *len = delArray.size();
    auto size = (*len)*sizeof(double);
    *data = static_cast<double*>(CoTaskMemAlloc(size));
    memcpy(*data, delArray.data(), size);
}

C# code 
[DllImport("AudioPluginSpecDelay")]
private static extern void getArray (out int length,[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] out double[] array);

int theSize;
double[] theArray;
getArray(out theSize, out theArray);
Run Code Online (Sandbox Code Playgroud)

如果我省略了有关数组的代码,那么int传递就好了.所以我相信这个方法是正确的,它只是绕过缺乏CoTaskMemAlloc.

c# c++ arrays interop unity-game-engine

5
推荐指数
1
解决办法
3473
查看次数

标签 统计

arrays ×1

c# ×1

c++ ×1

interop ×1

unity-game-engine ×1