VC++ VARINAT(可变量类型)操作

提供可变数组封装、可变类型数值/字符串获取等。

头文件:

#pragma once

#include <ccc/stdafx.h>

#include <comdef.h>
#include <comutil.h>
#include <Wbemidl.h>

namespace ccc
{
    namespace win32
    {
        bool                       Win32Variant_Callvirt(IWbemServices* services, IWbemClassObject* obj, const _bstr_t& clazz, const _bstr_t& method, ccc::function<bool(IWbemClassObject*)>&& internal_call) noexcept;
         
        inline ccc::string         VARIANT_string(BSTR& bstrVal)
        {
            ccc::string result;
            LPSTR str = _com_util::ConvertBSTRToString(bstrVal);
            if (NULL != str)
            {
                result = str;
                delete[] str;
            }

            SysFreeString(bstrVal);
            return result;
        }
         
        inline ccc::string         VARIANT_string(VARIANT& vt) noexcept
        {
            ccc::string result;
            if (vt.vt & VT_BSTR)
            {
                result = VARIANT_string(vt.bstrVal);
            }

            if (vt.vt != VT_EMPTY)
            {
                VariantClear(&vt);
            }

            return result;
        }
         
        inline ccc::string         VARIANT_string(IWbemClassObject* obj, LPCWSTR name) noexcept
        {
            VARIANT vt;
            VariantInit(&vt);

            HRESULT hr = obj->Get(name, 0, &vt, 0, 0);
            if (SUCCEEDED(hr))
            {
                ccc::string result = VARIANT_string(vt);
                VariantClear(&vt);
                return result;
            }
            else
            {
                VariantClear(&vt);
                return ccc::string();
            }
        }
         
        template <typename T>
        inline T                   VARIANT_value(VARIANT& vt, T defaultValue) noexcept
        {
            if (vt.vt == VT_I1)
            {
                return vt.cVal;
            }

            if (vt.vt == VT_I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值