我在Active Directory中工作,我知道V_VT用于获取变体的类型,但当我使用并打印它时,它显示3,这到底意味着什么?我在哪里可以找到有关它的文档?
VARIANT var;
VariantInit(&var);
hr = pUsr->Get(CComBSTR("userAccountControl"), &var);
if (SUCCEEDED(hr)) {
std::cout << V_VT(&var) << std::endl;
VariantClear(&var);
}
我认为您根本不应该使用VT_V(宏不是类型安全的(V_ VT(x(提供(作为文档状态(";方便的简写";访问VARIANT字段。例如V_VT(&vtXmlSource) = VT_UNKNOWN;
相当于vtXmlSource.vt = VT_UNKNOWN;
BSTR是宽字符串(具有不同的分配器/解除分配器(,https://learn.microsoft.com/en-us/previous-versions/windows/desktop/automat/bstr.但是您可以使用它们来构造std::wstring。
由于您使用ATL::CComBSTR,还应考虑使用ATL::CComVariant来避免内存泄漏(手动调用::VariantClear(。
#include <cassert>
#include <atlbase.h>
#include <iostream>
#include <string>
int main()
{
ATL::CComVariant var{ L"hello world!" };
assert(var.vt == VT_BSTR);
ATL::CComBSTR bstr{ var.bstrVal };
std::wstring str{ var.bstrVal };
std::wcout << bstr.m_str << "n";
std::wcout << str << "n";
return 0;
}