【发布时间】:2014-04-09 22:50:03
【问题描述】:
我的自定义 C 库中有一个函数,它返回一个指向浮点数的指针。 (这实际上是一个包含音频值的浮点数组)。
我想在 Unity3d 中使用这个 C 库(并返回浮点数组),所以我正在为它编写一个 C# 包装器。如何在我的 c# 脚本中正确导入/声明我的 C 函数?
我的 C 声明如下所示:
float* getAudioBuffer(mySynth_t synth);
在 C# 中,我的猜测是我应该将导入的函数声明为返回 float[],如下所示:
[DllImport (dll)]
private static extern float[] getAudioBuffer( IntPtr synth)
正确吗?
我应该使用ref 关键字吗?我应该在某处使用out 关键字吗?
我熟悉 C++,但对 C# 完全不熟悉,所以我不太了解编组等。
浮点数组中的数据也是音频数据,用于填充 OnFilterRead 中 Unity3d 的音频缓冲区。所以这会被调用很多次。 任何关于最佳实践的提示、示例代码或指针都将不胜感激。
【问题讨论】:
-
首先研究 pinvoke:msdn.microsoft.com/en-us/library/bd99e6zt.aspx。这不是一件容易的事。
标签: c# c++ c unity3d marshalling