COM Interop in Mono 2.0

8

Ich versuche, diesen Code in einem Unity-Projekt zu verwenden, aber es scheint, dass die Implementierungen von COM Interop in Mono / .NET unterscheidet sich, wodurch der Code fehlschlägt oder abstürzt. Das Ausführen des Codes in .NET funktioniert gut, aber das Ausführen mit Mono 2.0 (außerhalb von Unity) schlägt auf die gleiche Weise wie in Unity fehl, was darauf hindeutet, dass es ein Problem mit Mono im Allgemeinen und nicht mit Unity ist.

Wenn ich den Code so wie er ist kompilieren und ausführen, schlägt er fehl, weil der Cast von MMDeviceEnumerator zu IIMMDeviceEnumerator schlägt fehl. Wenn Sie alle Interfaces mit [ComInterop] dekorieren, ist die Umwandlung erfolgreich, aber der Aufruf von GetDefaultAudioEndpoint stürzt Unity / Mono mit einer Zugriffsverletzung ab.

Es ist schwer, eine gute Dokumentation von COM Interop auf Mono im Allgemeinen zu finden - und besonders in Bezug auf solch eine alte Version. Ist es überhaupt möglich, das in Gang zu bringen?

    
Johan 14.02.2017, 10:29
quelle

2 Antworten

1

Umbrechen Sie die COM-Funktionen in C-Funktionen und rufen Sie die C-Funktionen stattdessen über P / Invoke auf. Dies kann in zwei Schritten geschehen:

  1. Erstellen Sie ein VC ++ - Projekt, das die benötigten Funktionen in wasapi umschließt. Setzen Sie sie über eine Moduldefinitionsdatei oder __ declspec (dllexport) . Erstellen Sie den Code in einer DLL, die die benötigten Funktionen verfügbar macht.
  2. Greifen Sie in Ihrem Unity3D-Projekt über P / Invoke zu.

Hier ist ein Beispiel . In Ihrem Fall verwenden Sie einfach den COM-Code im C / C ++ - Teil, um das zu tun, was Sie wollen.

    
zwcloud 21.02.2017, 15:22
quelle
-2

Mono 1.0 und Mono 1.1.xx haben keine Unterstützung für COM .

Versuchen Sie es nicht mit Mono, Mono ist für Plattformunabhängigkeit und COM Interop ist nur Microsoft. Verwenden Sie Open-Source-SDKs für die Videowiedergabe oder rufen Sie Anwendungen über die Befehlszeile wie vlc auf, um sie abzuspielen, zu codieren usw.

    
SACn 24.02.2017 07:13
quelle

Tags und Links