【发布时间】:2011-01-22 11:27:19
【问题描述】:
是否有任何易于使用、高级类或库可让您在 Visual C++ 中与VARIANTs 进行交互?
更具体地说,我想在 POD 类型(例如double、long)、字符串(例如CString)和容器(例如std::vector)和VARIANTs 之间进行转换。例如:
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 类型
- _bstr_t、CComBSTR 或 BSTR 用于字符串
- CComSafeArray 或 SAFEARRAY 用于数组
有没有什么简单的方法——除了切换到 Visual Basic——来避免这种尴尬的内存管理和逐位VT_ARRAY | VT_I4 代码的噩梦?
相关问题:
【问题讨论】:
-
这个问题并不真正适用于 [c++](它没有那个结构),只是视觉方言。
-
对于任何好奇 POD 在这里意味着什么的人是堆栈溢出的答案。 stackoverflow.com/questions/146452/what-are-pod-types-in-c
标签: windows visual-c++ variant