第一
LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
printf("%s\n", asdfsdf);
第二
printf("%s\n", (LPCTSTR)(_bstr_t)v);
它们是相同的,但第一个条件导致无法读取的代码
为什么?
答案 0 :(得分:5)
_bstr_t
class将BSTR封装在C ++类中。在你的第一个实例中:
LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
您正在创建一个_bstr_t
对象,从中提取LPCTSTR
,但临时_bstr_t
对象会被破坏。无论asdfsdf
指向的是什么,现在已经解除分配,无法再使用。
在你的第二个例子中
printf("%s\n", (LPCTSTR)(_bstr_t)v);
在调用_bstr_t
之后的之前,不会破坏临时printf()
对象,因此使用LPCTSTR
值没有问题。