2017-02-14 80 views
8

Tôi đang cố gắng sử dụng mã this trong một dự án Unity, nhưng có vẻ như việc triển khai COM Interop trong Mono/.NET khác, khiến mã không thành công hoặc bị lỗi. Chạy mã trong .NET hoạt động tốt, nhưng chạy nó với Mono 2.0 (bên ngoài Unity) không giống như trong Unity, cho thấy nó là một vấn đề với Mono nói chung và không phải là Unity.COM Interop trong Mono 2.0

Nếu tôi biên dịch và chạy mã như vậy, nó không thành công vì type cast từ MMDeviceEnumerator đến IIMMDeviceEnumerator không thành công. Khi trang trí tất cả các giao diện với [ComInterop], dàn diễn viên thành công, nhưng cuộc gọi tới GetDefaultAudioEndpoint sẽ làm hỏng Unity/Mono bằng Vi phạm Truy cập.

Thật khó để tìm tài liệu hay về COM Interop trên Mono nói chung - và đặc biệt là như vậy liên quan đến một phiên bản cũ như vậy. Là nó có thể có được để chạy này?

Trả lời

1

Quấn hàm COM trong các chức năng C và gọi hàm C qua P/Invoke. Điều này có thể được thực hiện theo hai bước:

  1. Tạo dự án VC++ bao bọc các chức năng bạn cần trong wasapi. Hiển thị chúng qua số module define file hoặc __declspec(dllexport). Xây dựng mã thành một dll để hiển thị các hàm bạn cần.
  2. Trong dự án Unity3D của bạn, hãy truy cập chúng qua P/Invoke.

Đây là example. Trong trường hợp của bạn, chỉ cần sử dụng mã COM trong phần C/C++ để làm những gì bạn muốn.

+0

Đó chính xác là những gì tôi đã kết thúc – Johan

-2

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

Dừng thử với Mono, Mono dành cho độc lập nền tảng và COM Interop chỉ dành cho Microsoft. Sử dụng SDK nguồn mở để phát video hoặc gọi ứng dụng tốt hơn từ dòng lệnh như vlc để phát, mã hóa, v.v.

Các vấn đề liên quan