Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在查找Marshal.GetObjectForNativeVariant()的函数替换_C#_Uwp - Fatal编程技术网

C# 正在查找Marshal.GetObjectForNativeVariant()的函数替换

C# 正在查找Marshal.GetObjectForNativeVariant()的函数替换,c#,uwp,C#,Uwp,我想通过使用GetObjectForNativeVariant(IntPtr)将COM变量转换为对象,但是这个API现在已经过时了。当我运行那个API时,UWP返回了异常。 异常消息:在变量和系统之间编组。不支持对象 我将数据从非托管内存指针复制到字节数组,并将其转换为字符串(这是我希望随API返回的对象),但它没有给出我预期的结果 GCHandle PropHandle = GCHandle.Alloc(this, GCHandleType.Pinned); return Marshal.Ge

我想通过使用GetObjectForNativeVariant(IntPtr)将COM变量转换为对象,但是这个API现在已经过时了。当我运行那个API时,UWP返回了异常。 异常消息:在变量和系统之间编组。不支持对象

我将数据从非托管内存指针复制到字节数组,并将其转换为字符串(这是我希望随API返回的对象),但它没有给出我预期的结果

GCHandle PropHandle = GCHandle.Alloc(this, GCHandleType.Pinned);
return Marshal.GetObjectForNativeVariant(PropHandle.AddrOfPinnedObject());

他们不是在开玩笑,他们取消了UWP中对COM自动化的所有支持。CLR通过抛出一个硬异常来强制执行它,而不仅仅是通过封送处理后门。没有办法绕过它,没有选择。这就引出了一个问题,即该变体来自何处,因为没有剩余的api可用于创建变体。您最好运行WACK工具,以确保您使用的旧代码不会通过认证。谢谢@Hans,因此无法从通用Windows应用程序访问COM对象。这不是什么意思。COM自动化是COM的一个特定子集,具有IDispatch、VARIANT、BSTR、SAFEARRAY等类型。您正在尝试封送哪种类型。如果您试图将winRT类型封送到winRT类型,这不会是问题。但如果他试图将.net类型转换为winRT类型。这将是一个问题。我可以分享更多细节吗?