windows – 在C中转换为VARIANT类型的简单方法
是否有任何易于使用的高级类或库可以让您与Visual C中的VARIANT进行交互?
更具体地说,我想在POD类型(例如,double,long),字符串(例如CString)和容器(例如std :: vector)和VARIANT之间进行转换.例如: long val = 42; VARIANT var; if (ToVariant(val,var)) ... // tries to convert long -> VARIANT comObjPtr->someFunc(var); std::vector<double> vec; VARIANT var = comObjPtr->otherFunc(); if (FromVariant(var,vec)) ... // tries VARIANT -> std::vector<double> 我(天真地?)假设与COM一起工作的人一直这样做,所以最有可能是一个方便的库来处理各种转换.但是我能找到的所有内容都是各种各样的包装类,每个类都转换为几种类型: > _variant_t或CComVariant用于POD类型 有没有简单的方法 – 没有切换到Visual Basic – 以避免这种尴尬的内存管理和按位VT_ARRAY的噩梦VT_I4代码? 相关问题: > CComVariant vs. _variant_t,CComBSTR vs. _bstr_t 解决方法
好吧,大多数艰苦的工作已经为你完成了各种包装类.我更喜欢_variant_t和_bstr_t,因为它们更适合转换为POD类型和字符串.对于简单数组,您真正需要的只是模板转换功能.类似于以下内容:
// parameter validation and error checking omitted for clarity template<typename T> void FromVariant(VARIANT Var,std::vector<T>& Vec) { CComSafeArray<T> SafeArray; SafeArray.Attach(Var.parray); ULONG Count = SafeArray.GetCount(); Vec.resize(Count); for(ULONG Index = 0; Index < Count; Index++) { Vec[Index] = SafeArray[Index]; } } .... std::vector<double> Vec; VARIANT Var = ...; FromVariant(Var,Vec); ... 当然,如果数组包含非POD类型,事情会变得毛茸茸(关于内存/生命周期管理),但它仍然可行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows Phone 7 – 在NavigationService中清除后台
- windows – 从没有CGo的Go调用COM对象方法
- win7 python pdf2image入坑经历
- .net – 在Windows中添加全局键盘快捷键的最简单方法是什么
- 无法在Windows7中运行conda install -c menpo opencv3 = 3.
- windows-mobile – 如何在Windows CE设备中最小化批处理文件
- Windows上禁用SSL V3需要重启吗? – 贵宾犬利用
- Windows Azure计划程序(预览)
- windows-server-2008 – 虚拟服务器上的SQL Server 2008 Wo
- 使用dll和java jni4net时出现UnsatisfiedLinkError异常
- Node-Webkit – 启动最大化
- windows – 确定磁盘块级别的更改
- windows-7 – W7路由 – 流量不会进入默认网关
- Windows 服务器操作系统安全设置加固方法
- windows-server-2008 – Windows Server 2008上的
- 64位应用程序上的Windows HANDLE的范围是多少?
- windows-services – 使用一个Windows服务执行作
- Windows Phone 7 – 如何在Windows Phone 7上启动
- wcf – ClientCredentialType = Windows和= Ntlm
- 如何使用directx 11和Windows 7的硬件加速视频/