- ベストアンサー
文字型変換
開発環境 XP Home Edtion Microsoft Visual C++ 2008 Express Edition PSTR型からString型に変換したいですが PSTR strText; char *ree; ree=(char*)strText; String^ data; data=gcnew String(ree); このままだとchar型なので1文字しか入りません どのようにしたら何文字も入るようにできますか? 知識不足なところも多々あると思いますがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
補足頂きました。 私の使用しているモノは、VisualStudio2005ExpなのでPINVOKEに関しては、一寸分かりません・・・。 色々調べているのですが、「String^ → char*」 への変換は良く語られているのですが、その逆が中々見つかりませんでした。 先程一応、此れを見つけました。ただ、VisutalStudio2008では、出来るかどうかわかりません。 http://mag.autumn.org/Content.modf?id=20050508012415 PSTR pstr = "hello"; System::String^ data = System::Runtime::InteropServices::Marshal::PtrToStringAnsi((System::IntPtr)pstr); 此れで無理ならば、私の知識ではギブアップと言う事に成ります。
その他の回答 (2)
- machongola
- ベストアンサー率60% (434/720)
御礼頂きました。すんません、私はSQLに対する知識がありません。 以下に変換の手法が書いてありました。 http://msdn.microsoft.com/ja-jp/library/bb384859.aspx http://msdn.microsoft.com/ja-jp/library/bb384865.aspx PSTR pstr = "hello"; String^ data = marshal_as<String^>(pstr); ではないでしょうか。
お礼
marshal_asを使うにはPlatform SDKをインストールすればよいのですね?
補足
machongolaさん 回答、ありがとうございます。 調べてみたところ、Microsoft Visual C++ 2008 Express Editionでは マーシャリングライブラリが 使用できないようで、少し戸惑っています。 (私の勘違いでしたら申し訳ございません) 私が少し調べてみたところ 『PInvoke を使用して文字列をマーシャリングする』との記述を Visual C++ デベロッパー センターにて見つけました。 このPInvokeというものを用いて PSTR pstr = "hello"; String^ data = marshal_as<String^>(pstr); と同様の働きをする構文を作成することは可能でしょうか? 度重なる質問をしてしまい、申し訳ございません。 お返事をお待ちしています。
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 PSTR strText = "hello"; String^ data = gcnew String(strText, 0, ::strlen(strText)); なのでは。 あと、PSTRの素性はchar*なので char *ree; ree=(char*)strText; は必要なさそうです。
お礼
変換できましたが、この文字を使ってSQLへの 問い合わせ(SELECT句で使用)を行うことは可能でしょうか? いま、変換した文字を使用して、SQLへの問い合わせに使用しようと しているのですが 『'System.Data.SqlClient.SqlException' のハンドルされていない例外が System.Data.dll で発生しました。 追加情報: 名前 "(文字入力領域に入力した文字列)" は、このコンテキストでは許可されません。有効な表記は定数、定数表記、および (コンテキストによっては) 変数です。列名は許可されません。』 とのエラーが、文字を入力し、SELECT文を実行したところで発生してしまっています。 この問題は、どのようにすれば解決できるのでしょうか?
お礼
上記のサイトは参考になりました。 ここまで付き合ってもらってありがとうございます。