【问题标题】:How to convert Variant Safe Array into Char using C++ win32 API?如何使用 C++ win32 API 将 Variant Safe Array 转换为 Char?
【发布时间】:2012-11-07 07:40:15
【问题描述】:

嘿,我想将 &var 值转换为 char 数组。 我怎样才能做到这一点? 我正在使用 C++ Win32 API。

在另一个选项卡中打开图像,您将获得清晰的视图。

提前致谢。

【问题讨论】:

    标签: c++ windows winapi active-directory adsi


    【解决方案1】:

    最简单的方法是使用 ATL::CComSafeArray。假设你在变量 pSa 中有一个指向安全数组的指针,

    CComSafeArray<BSTR> array;
    array.Attach(pSa);
    
    for(int i=0; i< array.GetCount(); ++i)
    {
      std::wcout << (const wchar_t*) array[i] << std::endl;
    }
    

    如果你只想使用win32,

    SafeArrayLock(pSa);
    LONG uBound = -1, lBound = 0;
    SafeArrayUBound(pSa,1,uBound);
    SafeArrayUBound(pSa,1,lBound);
    int nCount = uBound - lBound + 1;
    for(int i = 0; i<nCount; ++i)
    {
     std::wcout << ((BSTR*)(pSa->pvData))[i] << std::endl;
    }
    

    【讨论】:

    • 如果您不希望 CComSafeArray 获得 pSa 指向的安全数组对象的所有权,请记住调用 Detach。
    • @Nanda: 如何在 C++ Win32 API 中获取CComSafeArray,array.GetCount() 关键字。
    • 如果您不想使用 ATL,这里是您必须按顺序调用的 API ) ((BSTR)(psa->pvData))[i].
    • @Nanda:i can't get (pSa-&gt;pvData))[i] -&gt;pvData variables after variables->...这是什么问题?
    • VARIANT 是一个统一的结构,可以容纳各种不同类型中的任何一种,如 int、char、string、array(包括变体本身),它是一种明显的多态性。如果你的变体对象持有一个数组,那么你应该在需要使用安全数组对象的地方使用变体对象的数组成员。
    猜你喜欢
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2010-11-23
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多