2017-02-14 91 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