我试图将一个双数组(它实际上是一个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.