トップページ > 過去ログ > 記事閲覧
DrawStringの引数
名前:taku.net 日時: 2008/03/05 17:48

DrawStringの3番目の引数にcharではなくstring型を使用したいのですが、可能でしょうか? DxLib.hは弄ってみたのですが、自分の力不足で上手く出来ませんでした…

Page: 1 |

Re: DrawStringの引数 ( No.1 )
名前: 日時:2008/03/05 18:30

string型ってC++のstringのことですか? であれば、c_strメソッドでbasic_stringの'\0'で 終わる文字列本体へのポインタを取得できます。 何をやって、何を期待して、どの様にうまく いかなかったのかをもう少し詳しく書いてもらえないでしょうか??
Re: DrawStringの引数 ( No.2 )
名前:taku.net 日時:2008/03/05 20:31

素早いレスありがとうございます。 >string型ってC++のstringのことですか? はい、その通りです。 string型が使いたいのは、文字列をどんどんつなげて長くしていきたいからです。 DrawStringの引数がstring型だと仮定するとこんな感じで↓ string test[4] test[0]="これは"; test[1]="テスト"; test[2]="です。"; for(int i=0;i<=10;i++) test[3]=test[3]+test[GetRand(2)]; DrawString(0,0,test[3],color); DrawStringの引数をstring型にしようと、DxLib.hに<string.h>をインクルードして、 extern int DrawString( int x, int y, const char *String, int Color, int EdgeColor = 0 ) ; という部分を extern int DrawString( int x, int y, const string *String, int Color, int EdgeColor = 0 ) ; に書き換えたのですが、上のコードで言う「DrawString(0,0,test[3],color);」 の部分で error C2664: 'DrawString' : 3 番目の引数を 'std::string' から 'const std::string *' に変換できません。 とエラーが出てしまいます。test[]の宣言方法もいくらか変えてみましたが、やはり上手くキャストできないようです。 ちょっと長くなってしまって日本語も変になってしまいましたが、 これが僕の期待した動作と、これまでにやったことです。 意味がわからなかったら突っ込んでください・・・;;
Re: DrawStringの引数 ( No.3 )
名前: 日時:2008/03/05 20:56

ヘッダだけ書き換えてもダメですよ。 きちんと処理を書かないと。。。 このレベルなら薄皮を一枚被せる程度で処理できる と思います。 テキトーですがサンプルです。 DrawStringのchar*の変わりにstringクラスを 受け取るDrawCString関数を定義します。 #C++なら別に引数でオーバーロードできるので #関数名かえる必要も無いのですが、 #判りやすいように書いてます。 #include "DxLib.h" #include <string> int DrawCString( int x, int y, std::string &String, int Color, int EdgeColor = 0 ) { return DrawString( x, y, String.c_str(), Color, EdgeColor ); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { std::string test[4]; test[0]="これは"; test[1]="テスト"; test[2]="です。"; for(int i=0;i<=10;i++) test[3]=test[3]+test[GetRand(2)]; ChangeWindowMode( TRUE ); SetDrawScreen( DX_SCREEN_BACK ); if( DxLib_Init() == -1 ){ // DXライブラリ初期化処理 return -1; // エラーが起きたら直ちに終了 } while( !ProcessMessage() && !CheckHitKey( KEY_INPUT_ESCAPE )) { DrawCString(0,0,test[3],0xFF0000); } DxLib_End() ; // DXライブラリ使用の終了処理 return 0 ; // ソフトの終了 }
Re: DrawStringの引数 ( No.4 )
名前:taku.net 日時:2008/03/05 22:57

ありがとうございます! ・・・やっぱりヘッダだけ書き換えてもだめなんですね。勉強になりました。 とりあえず示していただいたコードをそのままコンパイルしたのですが、気になる点が2つあったので、質問させていただきます 1、リリースコンパイルだとそのまま通るが、デバッグだとエラーが出る 2、出力される文字列が、何度やっても「これはこれはこれは・・・」である なぜでしょうか?重ね重ねすみません・・・
Re: DrawStringの引数 ( No.5 )
名前:crow 日時:2008/03/06 02:19

通さんも最初に言っていますが、別に関数を作らなくても、 DrawString(0,0,test[3],color); を DrawString(0,0,test[3].c_str(),color); にするだけでいけますよ。
Re: DrawStringの引数 ( No.6 )
名前: 日時:2008/03/06 16:14

>1、リリースコンパイルだとそのまま通るが、 >デバッグだとエラーが出る どんなエラーが出るのでしょう? >2、出力される文字列が、何度やっても >「これはこれはこれは・・・」である 使用している乱数発生器の問題では? っと思ったけど。。。 私のソースだと、乱数のシードを初期化していない からかもしれません。 SRand(int)関数でシードを設定してください。

Page: 1 |