1
SP_DEVICE_INTERFACE_DETAIL_DATA
は、可変長構造であり、そのサイズに配列(ポインタを持たない)が続くフィールドから始まります。SP_DEVICE_INTERFACE_DETAIL_DATAを割り当てる方法は?
この構造体を目的の配列長で割り当てるのに便利な方法は何ですか?
SP_DEVICE_INTERFACE_DETAIL_DATA
は、可変長構造であり、そのサイズに配列(ポインタを持たない)が続くフィールドから始まります。SP_DEVICE_INTERFACE_DETAIL_DATAを割り当てる方法は?
この構造体を目的の配列長で割り当てるのに便利な方法は何ですか?
MSaltersが提案のように、私はそれをやった:
std::vector<char> rawbuf(sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA) + bufferlen);
SP_DEVICE_INTERFACE_DETAIL_DATA* pDIDD =
reinterpret_cast<SP_DEVICE_INTERFACE_DETAIL_DATA*>(&rawbuf[0]);
編集:
をレイモンド・チェンの例に続いて(もon his blogを議論したように)以下のように私はSP_DEVICE_INTERFACE_DETAIL_DATA
構造を割り当てることができます:
PSP_DEVICE_INTERFACE_DETAIL_DATA pDIDD =
malloc(FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA,
DevicePath[bufferlen]));
を
Eh、いいえ、 'malloc'は' free'でマッチしますが、 'std :: unique-ptr'は' dエレテ。簡単に: 'std :: vector rawbuf(sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA)+ bufferlen); SP_DEVICE_INTERFACE_DETAIL_DATA * ptr = reinterpret_cast (&rawbuf [0]); ' –
MSalters
@MSalters:それを指摘してくれてありがとう。あなたはこれを答えることができますか?私は間違った投稿を削除し、あなたを受け入れることができます。 –
このテクニックは、望ましいバッファサイズを提供しますが、問題は望ましい配列の長さに関するものでした。必要な実際のサイズは 'FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA、DevicePath [arraysize])'です。また、 'std :: vector'は 'char_position'を保証しているだけで、' SP_DEVICE_INTERFACE_DETAIL_DATA'整列よりも弱いことに注意してください。一部のプロセッサでアラインメントフォルトが発生することがあります。 –