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?
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:
Hier ist ein Beispiel . In Ihrem Fall verwenden Sie einfach den COM-Code im C / C ++ - Teil, um das zu tun, was Sie wollen.
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.
Tags und Links c# mono com-interop unity3d wasapi