- ベストアンサー
VC++でconst void*に渡す
Sqlite3.dllの sqlite3_bind_text16に値を渡したいのですが、 3つ目の引数がconst void*となっているのでtextBox1->Textを渡したいので 適当にいろいろやったのですがよくわかりません。 sqlite3_bind_text16(&stmt,1,,-1,0); 他の引数は一応上のとおりです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> マーシャルライブラリというのは具体的に > marshal_as<System::String^> > や > pin_ptr<const wchar_t*> > が相当すると覚えて正しいのでしょうか? ANo.2 の参考URLを参照。
その他の回答 (3)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> Marshaから何かを使って変換するという事でしょうか マーシャル・ライブラリを使って System::String^ から wchar_t* に変換します。
補足
ありがとうございます マーシャルライブラリというのは具体的に marshal_as<System::String^> や pin_ptr<const wchar_t*> が相当すると覚えて正しいのでしょうか?
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
そこに渡すのはconst wchar_t*です。 なので System::String^ から const wchar_t* への変換が必要となります。
補足
ご回答ありがとうございます。 Marshaから何かを使って変換するという事でしょうか キャストか何かでconst wchar_t*を囲んでSystem::String^の前に書き加えるのでしょうか .toString()みたいなものという認識が正しいのでしょうか すみません、普段char*しか使わないものですから…
- wormhole
- ベストアンサー率28% (1626/5665)
単にVC++と書かれてますけどC++/CLIではないですか? マネージドコードとアンマネージドコードでのやりとりになるのでMarshalクラス使ってStringをアンマネージドコードの文字列に変換してあげないといけないかと思います。 >3つ目の引数がconst void*となっているのでtextBox1->Textを渡したいので >適当にいろいろやったのですがよくわかりません。 でたらめ(悪い意味での適当)にやって仮にうまく動いたようにみえても、それでわかったことにはならないですよ。 「理由はわからないけど動いてるからOK」は怖いです。
補足
早速ありがとうございます 確かに『::』と入力すると ステータスバー?のような場所には IntelliSense: 'C++/CLI で使用できません' と出ます そもそもC++は過去にgcc(?)でstdと書かずにcoutを使うような本を一冊ざっと読んだ程度で 基本ググって知識と照合しながらコードを書いているのでMSDNやQ&AにあるMarshalを使うソースコードを簡単に理解するレベルではない (MSDNのものはすでにコピーしてビルド失敗しました) ということを考慮してもらえるとありがたいです。
お礼
すみません、参考URIは携帯だったのできづきませんでした。 とりあえず、マーシャルライブラリに関する理解度には自信はあまりないですが、ビルドもできて文字化けもありませんでしたので、マーシャルライブラリについては余裕のある時に理解を深めようと思います。 最後までありがとうございました。