在Xamarin/Mono上,GetObjectForIUnknown抛出PlatformNotSupportedException 我有非托管C++类,它们正确地实现了IONDENT。我将代码编译成一个共享库,并将库部署到Android手机上。我实现了一个简单的Xamarin.Forms(C#)应用程序,它通过标准的P/Invoke使用这个库。使用工厂方法,我创建了一组这些类,每个类都有自己的特定类型(并实现了自己的接口,从而使用支持的iid将S_OK返回到QueryInterface调用)
该对象是使用p/Invoked本机工厂方法创建的,因此我获得了一个有效的在Xamarin/Mono上,GetObjectForIUnknown抛出PlatformNotSupportedException 我有非托管C++类,它们正确地实现了IONDENT。我将代码编译成一个共享库,并将库部署到Android手机上。我实现了一个简单的Xamarin.Forms(C#)应用程序,它通过标准的P/Invoke使用这个库。使用工厂方法,我创建了一组这些类,每个类都有自己的特定类型(并实现了自己的接口,从而使用支持的iid将S_OK返回到QueryInterface调用),c#,android,xamarin,com,mono,C#,Android,Xamarin,Com,Mono,该对象是使用p/Invoked本机工厂方法创建的,因此我获得了一个有效的IntPtr类型指针 然而,当我试着打电话时 IntPtr myObj = NativeBridge.CreateMyObject(); var obj = Marshal.GetObjectForIUnknown(myObj); 代码抛出平台不支持异常 该网站声明,我使用的.NET标准2.0支持此方法 我的Xamarin.Forms项目在微软Visual Studio 2017中编译为Xamarin.Android+共享
IntPtr
类型指针
然而,当我试着打电话时
IntPtr myObj = NativeBridge.CreateMyObject();
var obj = Marshal.GetObjectForIUnknown(myObj);
代码抛出平台不支持异常
该网站声明,我使用的.NET标准2.0支持此方法
我的Xamarin.Forms项目在微软Visual Studio 2017中编译为Xamarin.Android+共享.NET标准2.0库
我是否遗漏了一些暗示?在此配置中,Xamarin是否真的不支持GetObjectForIUnknown?是否有其他方法可以达到相同/相似的结果?还是我在做一些完全错误的事情
EDIT1:对同一IntPtr
调用的Marshal.QueryInterface
抛出NotImplementedException
EDIT2:在Mono-in-master中似乎不受支持:QueryInterface
和GetObjectForIUnknown
方法实现被包装在MOBILE
的条件中
我的问题是:在XAMARIN中,有没有一种方法可以在单/安卓上使用COM模型,而不必滚动我自己的本地库来实现这些实现?如何在Xamarin使用C++ COM,你可以检查下面的链接。WendyZang MSFT我非常了解在托管环境中使用本机库的其他方法。但是,COM接口是实现互操作性的标准方法,无需定制包装器库。我的观点是,我应该能够调用QueryInterface、GETObjutFixIngor和Type EngestCp,然后调用被托管对象的方法,它透明地调用非托管I未知类实例。对于如何在Xamarin使用C++ COM,您可以检查下面的链接。WendyZang MSFT我非常了解在托管环境中使用本机库的其他方法。但是,COM接口是实现互操作性的标准方法,无需定制包装器库。我的观点是,我应该能够调用QueryInterface、GetObjectForIUnknown和typecast到C#包装器,然后调用托管对象的方法,该方法透明地调用非托管IUnknown类实例。