- 締切済み
void*型をキャストしたい。
void*型をdoubleにキャストしたいのですが方法がわかりません。 何かインクルードなども必要でしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
本当にdoubleですか? 本当にvoid * ですか? void*はポインタでdoubleは数値です。 本来はキャストできるものではありません。 #1のエラー内容から ・Get??? が NULL を返している ・初期化されていない(どこを指しているのか不定な)ポインタを Get??? が返している というあたりが予想されます。 デバッガを使ったり void * p = get???() ; printf("%p\n",p) ; 等して get??? がどんな値を返しているのか、確認してください。 あと、その Get??? のマニュアルに詳しく書いてないですか? もし、公開されているライブラリなら、具体的にどのライブラリか教えていただけるとよいのですが。 例えば Get???: get property value とあって、その後に個別に GetAAA: (説明) GetBBB: (説明) ... 等とあるとか doubleのビットパターンを、void * に入れて返している可能性も0ではないです。
- hitomura
- ベストアンサー率48% (325/664)
多分以下の質問の続きなのでしょうが、 http://okwave.jp/qa/q8725097.html だとしたら double value = *(static_cast<double *>(Get???())); で行けると思います。 ……が、上記の前に上記関数で帰ってくるプロパティ値が本当に double か確認する必要があると思いますし、上記質問に記載の関数の説明を読むにプロパティが保持する値の型をチェックできる関数があるはずです。"Get property type." という感じのことが書いてある関数はありませんか?
補足
ありがとうございます。 値の型がdoubleであることは確認できています。 回答いただいた方法で試したのですが 【ハンドルされない例外が発生しました…読み取り中にアクセス違反が発生しました】 と出てきてその部分の処理が通りません。
補足
Autodesk MotionBuilder 2012 SDK Documentation FBProperty というClassのGetValuePtr というメソッドです。 ------------------------------ void* GetValuePtr ( ) const Get property value. ------------------------------- GetValuePtr の説明はこれだけです。 型はFBProperty のGetPropertyTypeName で調べました。 ------------------------------- char* GetPropertyTypeName ( ) Get the property's type name. Returns:The property's type name. ------------------------------- 以上がGetPropertyTypeName の説明です。 const char* jpName[40]; const char* jpTypeName[40]; void * jpValue[40]; FBProperty* jp = joystick_PropertyList.operator[](i);// プロパティを取得 const char* jpName = jp->GetName(); // プロパティの名前を確認 (ここは問題なく自分の意図した名前が得られています。) const char* jpTypeName = jp->GetPropertyTypeName(); // プロパティのタイプ、型を取得 (これがdoubleと返ってきます。double型であることに問題はありません。 他のものでも自分が予想していた型が返ってきています。) void* jpValue = jp->GetValuePtr(); // プロパティの値を取得 (取得はできているようですが値を確認することができません。) 返ってくる値は 0x000000000000000000000 といった値が返ってきています。 この値に変化はありません。 あれからいろいろ試したところ double value1 = *(double *)&jpValue で処理は通ったのですが、値が 0.000000 しか返ってきませんでした。 モーションビルダー上では数値は入っているはずです。