Mono 2.0中的COM Interop

Joh*_*han 8 c# mono com-interop unity-game-engine wasapi

我试图在Unity项目中使用代码,但似乎Mono/.NET中的COM Interop的实现不同,这导致代码失败或崩溃.在.NET中运行代码工作正常,但使用Mono 2.0(在Unity之外)运行它的方式与Unity中的方式相同,这表明它与Mono一般存在问题,而不是Unity.

如果我按原样编译并运行代码,则会失败,因为从MMDeviceEnumerator转换为IIMMDeviceEnumerator 的类型失败.使用[ComInterop]装饰所有接口时,转换成功,但对GetDefaultAudioEndpoint的调用使Unity/Mono因访问冲突而崩溃.

很难在Mono上找到COM Interop的良好文档 - 尤其是关于这样一个旧版本的文档.是否可以让它运行?

zwc*_*oud 1

将 COM 函数包装在 C 函数中,并通过 P/Invoke 调用 C 函数。这可以分两步完成:

  1. 创建一个 VC++ 项目,将您需要的函数包装在 wasapi 中。通过模块定义文件__declspec(dllexport)公开它们。将代码构建到公开您需要的功能的 dll 中。
  2. 在您的 Unity3D 项目中,通过 P/Invoke 访问它们。

这是一个例子。对于您的情况,只需使用 C/C++ 部分中的 COM 代码即可完成您想要的操作。