gpt4 book ai didi

c++ - 使用映射将 COM VARIANT 类型映射到实际类型

转载 作者:行者123 更新时间:2023-11-28 08:27:07 26 4
gpt4 key购买 nike

我正在为从客户端发送不同类型的值的 COM 对象编写 COM 包装器,并希望将 Map 中的这些类型映射到它们的实际 C++ 类型,例如将 VT_BSTR 映射到 wstring 等。

我正在考虑定义所有 COM Variant 类型的枚举,然后使用映射将该枚举作为键和包含检索值的实际类型,但是我遇到了我似乎无法找到的问题要放入我的 map 中的全局类型,我可以将其转换为字符串或 double 或交给我放置在 map 中的任何内容。

也许我的想法完全错误,请指教?

我在考虑空指针,但编译器似乎不喜欢我的转换:

(例子)

    enum Type
{
VT_INTEGER=0,
VT_DBL=1

};


map<Type, void*> typemap;
typedef pair<Type, void*> m_typepair;
typemap.insert( m_typepair(VT_INTEGER, 0));
typemap.insert( m_typepair(VT_DBL, (double)2.5)); // it does not like this cast

map<Type, void*>::iterator m_typeiter;

迭代这个映射可能需要内部的 switch 语句来找到正确的类型,我不确定是否有更好的方法?

最佳答案

不确定您要做什么,这听起来肯定是错误的。您从客户端获得的 VARIANT 需要转换为您知道如何处理的类型。这很容易做到,只需调用 VariantToXxxx() 函数即可。例如,如果要获取字符串,请使用 VariantToString()。

已经有几个可用的 C++ 包装器类使这更容易。 _variant_t、CComVariant、COleVariant。他们都做同样的事情,只是不同的#include 文件。 _variant_t 是一个很好的选择,因为它不会将您束缚在 MFC 或 ATL 中。除非您已经在使用它们。他们的 ChangeType() 方法进行转换。内存管理是自动的。

关于c++ - 使用映射将 COM VARIANT 类型映射到实际类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3618811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com