BSTRは、表面上ワイド文字だが、文字列本体の前には文字列のバイト数、文字列本体の後には2バイトのNULL終端があるので、全く同じに扱うことはできない。
SysAllocString function (oleauto.h) - Win32 apps | Microsoft Docs
BSTR 用のメモリの割り当てと解放 | Microsoft Docs
BSTR とは? - Windows 徹底解説 - Web/DB プログラミング徹底解説
バイト数や2バイトNULL終端があるかを確認する。
BSTR.cppで、
str - 2は、BSTR分2つ前だから4バイト前を指す。
str[5]は、最後の要素からBSTR1つ後だから2バイト後を指す。
ABCDE str[-1] = 10 str[0] = 0x00000041 str[1] = 0x00000042 str[2] = 0x00000043 str[3] = 0x00000044 str[4] = 0x00000045 str[5] = 0x00000000 続行するには何かキーを押してください . . .
"ABCDE"は5文字なので10バイト。
確かに手前に10が入ってる。
後ろもNULL終端されてる。
Sample/com/BSTR/BSTR/src/BSTR at master · bg1bgst333/Sample · GitHub