IUnknown в Xamarin / Mono, GetObjectForIUnknown выдает исключение PlatformNotSupportedException - PullRequest
1 голос
/ 19 июня 2020

У меня есть неуправляемые классы C ++, которые правильно реализуют IUnknown. Я компилирую код в общую библиотеку и развертываю библиотеку для использования на телефоне Android. Я реализовал простое приложение Xamarin.Forms (C#), которое использует эту библиотеку через стандартный P / Invoke. Используя фабричный метод, я создаю набор этих классов, каждый из которых имеет свой собственный тип c (и также реализует свой собственный интерфейс, таким образом возвращая вызов S_OK в QueryInterface с поддерживаемым iid).

Объект создается с использованием собственного фабричного метода P / Invoked, поэтому я получаю действительный указатель типа IntPtr.

Однако, когда я пытаюсь позвонить

IntPtr myObj = NativeBridge.CreateMyObject();
var obj = Marshal.GetObjectForIUnknown(myObj);

, код выдает PlatformNotSupportedException.

На сайте https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getobjectforiunknown?view=netstandard-2.0 указано, что это поддерживается в. NET Standard 2.0, который я использую.

Мой проект Xamarin.Forms скомпилирован как Xamarin. Android + Shared. NET Библиотека Standard 2.0 в MS Visual Studio 2017.

Есть ли какие-то последствия, которые я упустил? Действительно ли GetObjectForIUnknown не поддерживается в Xamarin в этой конфигурации? Есть ли альтернативы достижению sh таких же / похожих результатов? Или я делаю что-то совершенно не так на стороне C#?

EDIT1: вызов Marshal.QueryInterface на том же IntPtr выдает NotImplementedException

EDIT2: кажется, не поддерживается в Mono в master: https://github.com/mono/mono/blob/master/mcs/class/corlib/System.Runtime.InteropServices/Marshal.cs - реализации методов QueryInterface и GetObjectForIUnknown обернуты в условные выражения для MOBILE.

Итак, мой вопрос: могу ли я как-нибудь использовать Модель COM на Mono / Android в Xamarin.Forms, без развертывания моей собственной собственной библиотеки, которая связывает реализации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...