• ベストアンサー

文字列の連結について

開発環境 XP Home Edtion SQL Server2005 Express Edtion DBから選択してきたその値に .png という文字列を繋げて対応する画像を表示を反映させたいのですがどのようにすればよいですか? String^ str; SqlConnection^ sqlConn = gcnew SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\SOUTUKEN\\TEST.mdf;Integrated Security=True;User Instance=True"); sqlConn->Open(); str = "SELECT gazou FROM table1 WHERE gazou=1"; SqlCommand^ sqlCmd = gcnew SqlCommand(str,sqlConn); SqlDataReader^ exeReader = sqlCmd->ExecuteReader(); while(exeReader->Read() ) { str3=exeReader["gazou"]->ToString(); System::Diagnostics::Debug::WriteLine(str3); HDC hMdc; char* dstChar3; dstChar3 = (char*)(void*)Marshal::StringToHGlobalAnsi(str3); LPCSTR dstLPCSTR3; dstLPCSTR3 = (LPCSTR)dstChar3; LPCSTR name = "'"+dstLPCSTR3+"'.png"; HBITMAP hbmp = (HBITMAP)LoadImage( NULL, name, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION ); hMdc= CreateCompatibleDC(hdc ); SelectObject(hMdc, hbmp ); BitBlt(hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY); DeleteDC(hMdc); DeleteObject(hbmp); } sqlConn->Close(); なにとぞよろしくお願いします。

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

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

 こんにちは。  この「str3」は「String^型」でしょうか?(間違いなくString^型だと思う)。でしたら、以下で簡単に合成出来ます。  str3 = String::Concat("'", str3, "'", ".png");  それから、Marshal::StringToHGlobalAnsi()の後、Marshal::FreeHGlobal()で開放しないとメモリリークするので要注意です。  以下参考程度に。  while(exeReader->Read())  {     str3 = exeReader["gazou"]->ToString();     System::Diagnostics::Debug::WriteLine(str3);     //文字列を合成してファイル名を作る     str3 = String::Concat("'", str3, "'", ".png");     IntPtr name = Marshal::StringToHGlobalAnsi(str3);     HBITMAP hbmp = (HBITMAP)LoadImageA( NULL, static_cast<LPCSTR>(name.ToPointer()), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION );     //開放しないと駄目     Marshal::FreeHGlobal(name);     HDC hMdc = CreateCompatibleDC(hdc );     SelectObject(hMdc, hbmp );     BitBlt(hdc, 0, 0, 2000, 5000, hMdc, 0, 0, SRCCOPY);     DeleteDC(hMdc);     DeleteObject(hbmp);  }

9oo_001
質問者

お礼

返答遅れてすいません。 メモリの開放をしないといけないとは知りませんでした、ご指摘ありがとうございました、そして理解できました。 >この「str3」は「String^型」でしょうか? すいません、初期化のところを書き忘れました、その通りです。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

時と場合によっては sprintf系も選択肢にあがりますな>#1. sprintf(name, "'%s'.png", dstLPCSTR3); みたいに.

9oo_001
質問者

お礼

補足していただいてありがとうございました、とても役に立ちました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

> LPCSTR name = "'"+dstLPCSTR3+"'.png"; LPCSTRですと内容の変更できない変数の宣言になるのでまずいです LPSTRまたはLPTSTRなどとして dstLPCSTR3が十分収まる大きさの変数を用意しstrcpy/strcatなどで加工しましょう LPSTR name[MAX_PATH]; strcpy( name, dstLPCSTR3 ); strcat( name, ".png" ); といった具合です ファイル名の先頭に 'を付加して 拡張子の手前に' を付加するのであれば strcpy( name, "'" ); strcat( name, dstLPCSTR3 ); strcat( name, "'.png" ); といった記述になります ・・・

9oo_001
質問者

お礼

分かり易い説明ありがとうございました。

関連するQ&A