最初:
LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
printf("%s\n", asdfsdf);
2番目:
printf("%s\n", (LPCTSTR)(_bstr_t)v);
それらは同じですが、最初の条件は読み取り不可能なコードを引き起こします
なぜ?
この_bstr_tクラスは、C++クラス内にBSTRをカプセル化します。あなたの最初の例では:
LPCTSTR asdfsdf = (LPCTSTR)(_bstr_t)v;
オブジェクトを作成し、そこから_bstr_t抽出しますがLPCTSTR、一時_bstr_tオブジェクトは破棄されます。指し示しasdfsdfたものはすべて割り当てが解除され、使用できなくなります。
2番目の例では
printf("%s\n", (LPCTSTR)(_bstr_t)v);
一時オブジェクトはが呼び出される_bstr_tまで破棄されないため、値printf()を使用しても問題はありません。LPCTSTR