最初:
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