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)関数でシードを設定してください。
|
|