我正在移植我们的组件,该组件的核心是用 C++ 编写的,同时具有 ActiveX 和 .Net shell。组件内部在很多地方都使用了 VARIANT 类型。该组件参数的一些公共属性(get/set)和方法在 ActiveX 实现中属于 VARIANT 类型,在 .Net 实现中属于 System::Object 类型。在我们的代码内部,我们直接使用 VARIANT。
在实现 ActiveX 组件时,我不需要进行任何封送处理,因为 VARIANT 是 OLE/COM 类型。
在实现 .Net 组件时,我使用了类似的方法:
VARIANT var;
//...
//Initialize the VARIANT value
//...
System::IntPtr p( &var );
System::Object ^o = System::Runtime::InteropServices::Marshal::GetObjectForNativeVariant(p );
return o;
在 WinRT 中,似乎没有任何类似的 Marshal 类可以完成这项工作。根据 MSDN,“WinRT Platform::Runtime::InteropServices 命名空间仅供内部使用,不用于开发。”
我有哪些选择?当然,必须有一个现有的类来完成跨 ABI 边界编组 VARIANT 的工作。我不想写这样一个编组器然后发现它已经存在了!
任何帮助将非常感激。