2017-02-14 51 views
8

我想在Unity项目中使用this代码,但它似乎在Mono/.NET COM Interop的实现不同,这会导致代码失败或崩溃。在.NET中运行代码可以正常工作,但是使用Mono 2.0(在Unity之外)运行它的方式与在Unity中的方式相同,表明这是Mono的问题,而不是Unity。在单声道2.0 COM互操作

如果我按原样编译并运行代码,则失败,因为从MMDeviceEnumerator到IIMMDeviceEnumerator的type cast失败。在使用[ComInterop]装饰所有接口时,转换成功,但对GetDefaultAudioEndpoint的调用会导致Unity/Mono碰到访问冲突。

在单声道上很难找到好的COM Interop文档 - 特别是关于这样一个旧版本。这是否可以运行?

回答

1

将C函数换成C函数,然后通过P/Invoke调用C函数。这可以分两步完成:

  1. 创建一个VC++项目,将您需要的函数包装在wasapi中。通过module define file__declspec(dllexport)公开。将代码构建到一个可以公开所需功能的dll中。
  2. 在您的Unity3D项目中,通过P/Invoke访问它们。

这里是一个example。就你而言,只需使用C/C++部分中的COM代码即可完成你想要的任务。

+0

这正是我最终做的 – Johan