- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Variant型の中を調べる。)
C++BuilderXE2でVariant型を調べる方法
このQ&Aのポイント
- C++BuilderXE2でVarinat型を見る方法について教えてください。
- Variant型は16バイトで構成されており、タイプに応じた解釈が必要です。
- Memo1->Lines->Add("ISCHAR " + TargetFrameName->ISCHAR);という使い方はできません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その辺の情報はヘッダファイルにあります。 プリミティブなデータ型は0~72です。 この他、0x2000は配列、0x4000は参照です。 >16396 これから見ると参照+12なので、型としては VARIANTのポインタになります。 つまり、元データの+8からの4バイトは対象 となるVARIANT型データへのポインタという ことになります。 以下を見てください。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa380072(v=vs.85).aspx
その他の回答 (1)
- nda23
- ベストアンサー率54% (777/1415)
回答No.1
VARIANT型は先頭の16ビット整数の vtと言うメンバが型を示します。 文字列はVT_BSTR(=8)です。 文字列へのポインタはbstrValで 先頭から8バイト目にあります。
質問者
お礼
ご返事ありがとうございます。 やはり、中を見るためには自分で、タイプを判別しなければならないのですね。Variantのデータへのポインタ等は8バイト目にあることもmsdnでわかりました。 実際に見たいのは、PostDataでそのタイプを PostData->vt_PostData で見ると、16396 でした。このPostDataは実際にはIDとpasswordになると思うのですが、この中身を調べることはできるのでしょうか。8バイト目からの4バイトで示す領域が、実際のPostDataが格納されている場所にあたると思いますが、文字型などのようにそのサイズを知ることがわかりません。実際にサーバに送信されるわけですから、その長さの情報はどこかにあるはずなのですが。 このような当りの情報はないでしょうか。
お礼
詳細な情報ありがとうございます。 何度も苦吟して、ご指摘通りのDWORDはさらにVariant型への参照すなわちポインタになる(らしい)ことがわかりました。そうすると実体はさらにその先のVariant型のタイプを調べることになるのですね。 落ち着いて、調べることにします。予想ではascii文字になるはずな訳ですが。 また疑問がでてくれば教えて下さい。