第一:
LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
printf("%s\n", asdfsdf);
Run Code Online (Sandbox Code Playgroud)
第二:
printf("%s\n", (LPCTSTR)(_bstr_t)v);
Run Code Online (Sandbox Code Playgroud)
它们是相同的,但第一个条件导致无法读取的代码
为什么?
所述_bstr_t类封装一个C++类内部的BSTR.在你的第一个实例中:
LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
Run Code Online (Sandbox Code Playgroud)
你正在创建一个_bstr_t对象,从中提取LPCTSTR出来,然后临时_bstr_t对象被破坏.无论asdfsdf指向什么现在已经解除分配,不能再使用了.
在你的第二个例子中
printf("%s\n", (LPCTSTR)(_bstr_t)v);
Run Code Online (Sandbox Code Playgroud)
临时_bstr_t对象不破坏,直到之后的printf()叫,所以使用没有问题的LPCTSTR值.
| 归档时间: |
|
| 查看次数: |
2892 次 |
| 最近记录: |