_bstr_t to char *,惊人的结果

时间:2012-12-06 07:52:17

标签: char bstr

第一

LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
printf("%s\n", asdfsdf);

第二

printf("%s\n", (LPCTSTR)(_bstr_t)v);

它们是相同的,但第一个条件导致无法读取的代码

为什么?

1 个答案:

答案 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值没有问题。