• ベストアンサー

文字型変換

開発環境 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文字しか入りません どのようにしたら何文字も入るようにできますか? 知識不足なところも多々あると思いますがよろしくお願いします。

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

  • ベストアンサー
回答No.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);  此れで無理ならば、私の知識ではギブアップと言う事に成ります。

9oo_001
質問者

お礼

上記のサイトは参考になりました。 ここまで付き合ってもらってありがとうございます。

その他の回答 (2)

回答No.2

 御礼頂きました。すんません、私は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);  ではないでしょうか。

9oo_001
質問者

お礼

marshal_asを使うにはPlatform SDKをインストールすればよいのですね?

9oo_001
質問者

補足

machongolaさん 回答、ありがとうございます。 調べてみたところ、Microsoft Visual C++ 2008 Express Editionでは マーシャリングライブラリが 使用できないようで、少し戸惑っています。 (私の勘違いでしたら申し訳ございません) 私が少し調べてみたところ 『PInvoke を使用して文字列をマーシャリングする』との記述を Visual C++ デベロッパー センターにて見つけました。 このPInvokeというものを用いて  PSTR pstr = "hello";  String^ data = marshal_as<String^>(pstr); と同様の働きをする構文を作成することは可能でしょうか? 度重なる質問をしてしまい、申し訳ございません。 お返事をお待ちしています。

回答No.1

 こんばんは。  PSTR strText = "hello";  String^ data = gcnew String(strText, 0, ::strlen(strText));  なのでは。  あと、PSTRの素性はchar*なので  char *ree;  ree=(char*)strText;  は必要なさそうです。

9oo_001
質問者

お礼

変換できましたが、この文字を使ってSQLへの 問い合わせ(SELECT句で使用)を行うことは可能でしょうか? いま、変換した文字を使用して、SQLへの問い合わせに使用しようと しているのですが 『'System.Data.SqlClient.SqlException' のハンドルされていない例外が System.Data.dll で発生しました。 追加情報: 名前 "(文字入力領域に入力した文字列)" は、このコンテキストでは許可されません。有効な表記は定数、定数表記、および (コンテキストによっては) 変数です。列名は許可されません。』 とのエラーが、文字を入力し、SELECT文を実行したところで発生してしまっています。 この問題は、どのようにすれば解決できるのでしょうか?

関連するQ&A