• ベストアンサー

VC++でconst void*に渡す

Sqlite3.dllの sqlite3_bind_text16に値を渡したいのですが、 3つ目の引数がconst void*となっているのでtextBox1->Textを渡したいので 適当にいろいろやったのですがよくわかりません。 sqlite3_bind_text16(&stmt,1,,-1,0); 他の引数は一応上のとおりです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

> マーシャルライブラリというのは具体的に > marshal_as<System::String^> > や > pin_ptr<const wchar_t*> > が相当すると覚えて正しいのでしょうか? ANo.2 の参考URLを参照。

ft1711
質問者

お礼

すみません、参考URIは携帯だったのできづきませんでした。 とりあえず、マーシャルライブラリに関する理解度には自信はあまりないですが、ビルドもできて文字化けもありませんでしたので、マーシャルライブラリについては余裕のある時に理解を深めようと思います。 最後までありがとうございました。

その他の回答 (3)

回答No.3

> Marshaから何かを使って変換するという事でしょうか マーシャル・ライブラリを使って System::String^ から wchar_t* に変換します。

ft1711
質問者

補足

ありがとうございます マーシャルライブラリというのは具体的に marshal_as<System::String^> や pin_ptr<const wchar_t*> が相当すると覚えて正しいのでしょうか?

回答No.2

そこに渡すのはconst wchar_t*です。 なので System::String^ から const wchar_t* への変換が必要となります。

参考URL:
http://codezine.jp/article/detail/4774
ft1711
質問者

補足

ご回答ありがとうございます。 Marshaから何かを使って変換するという事でしょうか キャストか何かでconst wchar_t*を囲んでSystem::String^の前に書き加えるのでしょうか .toString()みたいなものという認識が正しいのでしょうか すみません、普段char*しか使わないものですから…

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

単にVC++と書かれてますけどC++/CLIではないですか? マネージドコードとアンマネージドコードでのやりとりになるのでMarshalクラス使ってStringをアンマネージドコードの文字列に変換してあげないといけないかと思います。 >3つ目の引数がconst void*となっているのでtextBox1->Textを渡したいので >適当にいろいろやったのですがよくわかりません。 でたらめ(悪い意味での適当)にやって仮にうまく動いたようにみえても、それでわかったことにはならないですよ。 「理由はわからないけど動いてるからOK」は怖いです。

ft1711
質問者

補足

早速ありがとうございます 確かに『::』と入力すると ステータスバー?のような場所には IntelliSense: 'C++/CLI で使用できません' と出ます そもそもC++は過去にgcc(?)でstdと書かずにcoutを使うような本を一冊ざっと読んだ程度で 基本ググって知識と照合しながらコードを書いているのでMSDNやQ&AにあるMarshalを使うソースコードを簡単に理解するレベルではない (MSDNのものはすでにコピーしてビルド失敗しました) ということを考慮してもらえるとありがたいです。

関連するQ&A