- 主题:抓到微软官网一个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.*
确实是个bug。
【 在 z16166 (Netguy) 的大作中提到: 】
: learn dot microsoft dot com /en-us/windows/win32/api/wbemcli/nf-wbemcli-iwbemclassobject-get
:
: 这个页面下的例子代码,是错误的。
:
--
FROM 203.145.94.*
贵公司肯定待遇不低。能让人看这种代码,写这种代码。
我看见全大写类型和驼峰混杂,脑袋痛。勾起了MFC时代的痛苦回忆,属于创伤后
应激障碍。
以上是观点。
当然,微软技术很先进。——这是事实。
【 在 z16166 的大作中提到: 】
: learn dot microsoft dot com /en-us/windows/win32/api/wbemcli/nf-wbemcli-iwbemclassobject-get
: 这个页面下的例子代码,是错误的。
: 文档里写着只有Get()成功才能清理没初始化的变量v,这个代码无条件清理了v。
: ...................
--
FROM 1.86.21.*
If an uninitialized pVal value is passed to the method, ...
这里传的并不是 uninitialized pVal value
C++ 默认替你初始化为零了, 所以统一 Clear 也没问题
【 在 z16166 的大作中提到: 】
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);
--
修改:ABCDEFGHJKLM FROM 124.193.189.*
FROM 124.193.189.*
错,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.*
纯结构C++也会帮你清零, 除非你用c语言, c编译器
不能安全使用的东西, 编译器应该帮你报错
【 在 z16166 的大作中提到: 】
错,VARIANT是纯C的,没有ctor,不存在"C++默认替你初始化为0"这种事情
【 在 ABCDEFGHJKLM 的大作中提到: 】
: If an uninitialized pVal value is passed to the method, ...
: 这里传的并不是 uninitialized pVal value
: C++ 默认替你初始化为零了, 所以统一 Clear 也没问题
: ...................
--
修改:ABCDEFGHJKLM FROM 124.193.189.*
FROM 124.193.189.*
为啥这么肯定?
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.*
是, IDE报警, 编译器没报错
如果是全局变量, 就能确定初始化了
【 在 z16166 的大作中提到: 】
为啥这么肯定?
vs2022编译一个demo cpp看了一下release mode的代码和变量,里面的v是随机值
只有写成VARIANT v{}; 这种才会初始化为0
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 纯结构C++也会帮你清零, 除非你用c语言, c编译器
: 不能安全使用的东西, 编译器应该帮你报错
: 错,VARIANT是纯C的,没有ctor,不存在"C++默认替你初始化为0"这种事情
: ...................
--
修改:z16166 FROM 222.130.138.*
FROM 124.193.189.*
不会
【 在 ABCDEFGHJKLM (ABCDEFGHJKLM) 的大作中提到: 】
: 纯结构C++也会帮你清零, 除非你用c语言, c编译器
: 不能安全使用的东西, 编译器应该帮你报错
:
: 【 在 z16166 的大作中提到: 】
--
FROM 203.145.94.*