デバック関数

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
レスト

デバック関数

#1

投稿記事 by レスト » 16年前

VS2005、WindowsAPI、C++、XPで開発をしています。

DebTextXYという関数を作ったのですが
画面を閉じるときにエラーが出てしまいます。
引数は(X座標、Y座標、表示する変数)です。

また表示されるテキストのdeb_1を動的に変数名に変更したいです。
例の場合 deb = 5 みたいなかんじです。
この処理がとても面倒な場合、
DebTextXY(20,40,str,abc)みたいにしてstrに
直接、deb = という感じに値を書こうかと考えています。
void DebTextXY(int x, int y, int deb){
	char str[/url] = "";
	wsprintf(str, TEXT("deb_1 = %d"), deb);		// ここ
	TextOut(hDC_Wnd, x, y, str, strlen(str));	
}

//処理部
char mess[/url] = "テスト"; 
int abc = 5;

DebTextXY(20,40,abc);

たいちう

Re:デバック関数

#2

投稿記事 by たいちう » 16年前

char str[/url] = "";

char str[1024];

tk-xleader

Re:デバック関数

#3

投稿記事 by tk-xleader » 16年前

void dumDebTextXY(int x, int y, int deb,const TCHAR *name){
	char str[1024]={0};
	wsprintf(str, TEXT("%s= %d"),name,deb);
	TextOut(hDC_Wnd, x, y, str, strlen(str));	
}

#define DebTextXY(X,Y,DEB) dumDebTextXY(X,Y,DEB,TEXT(#DEB))
でどうでしょうか?

tk-xleader

Re:デバック関数

#4

投稿記事 by tk-xleader » 16年前

>たいちうさん

僕もつられてやっちゃってるんですが、wsprintfに渡すバッファの長さとしては、1024ではなくて、1025を指定したほうがいいです。
参考:
http://msdn.microsoft.com/ja-jp/library/cc364872.aspx
http://support.microsoft.com/kb/77255/ja

Justy

Re:デバック関数

#5

投稿記事 by Justy » 16年前

tkmakwins15さん
>DebTextXY

 TCHAR使うなら、charとか strlenもそれに合わせないと、コンパイルが通らないことがあるのではないでしょうか。

tk-xleader

Re:デバック関数

#6

投稿記事 by tk-xleader » 16年前

あっ、そうですね。ということはこうなりますね。
void dumDebTextXY(int x, int y, int deb,const TCHAR *name){
	TCHAR str[1024]={0};
	wsprintf(str, TEXT("%s= %d"),name,deb);
	TextOut(hDC_Wnd, x, y, str, lstrlen(str));
}

#define DebTextXY(X,Y,DEB) dumDebTextXY(X,Y,DEB,TEXT(#DEB))

レスト

Re:デバック関数

#7

投稿記事 by レスト » 16年前

エラーも消え、できました><
みなさんありがとうございます。
定義文自体は理解しています。
例)#define FONT_MAX 16 は FONT_MAXを16と扱う

ただ#defineのところのTEXT(#DEB)についてよくわからなかったのですが
これはdebという変数を値ではなく変数名を取ってくるみたいな感じでよいのでしょうか?

tk-xleader

Re:デバック関数

#8

投稿記事 by tk-xleader » 16年前

#define STRING(S) #S
とすると、マクロの引数のSを文字列リテラルにします。

閉鎖

“C言語何でも質問掲示板” へ戻る