2011-10-24 29 views

答えて

-1

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])); 
+1

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

+0

@MSalters:それを指摘してくれてありがとう。あなたはこれを答えることができますか?私は間違った投稿を削除し、あなたを受け入れることができます。 –

+1

このテクニックは、望ましいバッファサイズを提供しますが、問題は望ましい配列の長さに関するものでした。必要な実際のサイズは 'FIELD_OFFSET(SP_DEVICE_INTERFACE_DETAIL_DATA、DevicePath [arraysize])'です。また、 'std :: vector 'は 'char_position'を保証しているだけで、' SP_DEVICE_INTERFACE_DETAIL_DATA'整列よりも弱いことに注意してください。一部のプロセッサでアラインメントフォルトが発生することがあります。 –

関連する問題