2017-02-14 37 views
8

Я пытаюсь использовать код this в проекте Unity, но кажется, что реализация COM Interop в Mono/.NET отличается, что приводит к сбою или сбою в работе кода. Запуск кода в .NET работает нормально, но запуск его с Mono 2.0 (за пределами Unity) завершается неудачно так же, как в Unity, что говорит о том, что это проблема с Mono вообще, а не Unity.COM Interop in Mono 2.0

Если я компилирую и запускаю код как есть, он терпит неудачу, потому что type cast от MMDeviceEnumerator до IIMMDeviceEnumerator терпит неудачу. При декорировании всех интерфейсов с помощью [ComInterop], листинг преуспевает, но вызов GetDefaultAudioEndpoint приводит к сбою Unity/Mono с нарушением доступа.

Трудно найти хорошую документацию COM Interop на Mono в целом - и особенно в отношении такой старой версии. Возможно ли, что это работает?

ответ

1

Оберните COM-функции функциями C и вызовите функции C через P/Invoke. Это можно сделать в два этапа:

  1. Создайте проект VC++, который обертывает нужные вам функции в wasapi. Выставить их через module define file или __declspec(dllexport). Создайте код в dll, который предоставляет функции, которые вам нужны.
  2. В своем проекте Unity3D обращайтесь к ним через P/Invoke.

Адрес example. В вашем случае просто используйте код COM в части C/C++, чтобы делать то, что вы хотите.

+0

Это было именно то, что я делал – Johan

-2

Mono 1.0 and Mono 1.1.xx do not have support for COM.

Остановить попытку с помощью Mono, Mono для независимости от платформы и COM Interop - только Microsoft. Используйте SDK с открытым исходным кодом для воспроизведения видео или лучше запускайте приложения из командной строки, например vlc, чтобы играть, кодировать и т. Д.