- 主题:抓到微软官网一个bug
learn dot microsoft dot com /en-us/windows/win32/api/wbemcli/nf-wbemcli-iwbemclassobject-get
这个页面下的例子代码,是错误的。
文档里写着只有Get()成功才能清理没初始化的变量v,这个代码无条件清理了v。
#include <iostream>
using namespace std;
#include <wbemidl.h>
#pragma comment(lib, "wbemuuid.lib")
//Assumes that pObj is defined as a pointer
// to an IWbemClassObject object.
VARIANT v;
BSTR strClassProp = SysAllocString(L"__CLASS");
HRESULT hr;
hr = pObj->Get(strClassProp, 0, &v, 0, 0);
SysFreeString(strClassProp);
// check the HRESULT to see if the action succeeded.
if (SUCCEEDED(hr) && (V_VT(&v) == VT_BSTR))
{
wprintf(L"The class name is %s\n.", V_BSTR(&v));
}
else
{
wprintf(L"Error in getting specified object\n");
}
VariantClear(&v);
--
FROM 222.130.138.*
错,VARIANT是纯C的,没有ctor,不存在"C++默认替你初始化为0"这种事情
【 在 ABCDEFGHJKLM 的大作中提到: 】
: If an uninitialized pVal value is passed to the method, ...
: 这里传的并不是 uninitialized pVal value
: C++ 默认替你初始化为零了, 所以统一 Clear 也没问题
: ...................
--
修改:z16166 FROM 222.130.138.*
FROM 222.130.138.*
这是off topic,哈哈
【 在 DoorWay 的大作中提到: 】
: 贵公司肯定待遇不低。能让人看这种代码,写这种代码。
: 我看见全大写类型和驼峰混杂,脑袋痛。勾起了MFC时代的痛苦回忆,属于创伤后
: 应激障碍。
: ...................
--
FROM 222.130.138.*
为啥这么肯定?
vs2022编译一个demo cpp看了一下release mode的代码和变量,里面的v是随机值
只有写成VARIANT v{}; 这种才会初始化为0
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 纯结构C++也会帮你清零, 除非你用c语言, c编译器
: 不能安全使用的东西, 编译器应该帮你报错
: 错,VARIANT是纯C的,没有ctor,不存在"C++默认替你初始化为0"这种事情
: ...................
--
修改:z16166 FROM 222.130.138.*
FROM 222.130.138.*