[DxLib]メンバ関数内でのSetOutApplicationLogValidFlagの挙動について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
purin52002
記事: 235
登録日時: 2年前
連絡を取る:

[DxLib]メンバ関数内でのSetOutApplicationLogValidFlagの挙動について

#1

投稿記事 by purin52002 » 2年前

こんにちは
今日はDxLib内の関数、SetOutApplicationLogValidFlagについて質問があります。

現在、DxLibを使いオセロを作っています。
ある程度ゲームとして完成したので、exeファイルを配布しようと思ったのですが
exeファイルを実行すると謎のLog.txtが、、、

調べてみるとLog.txtというのは
  • DxLibの出力ログ
  • SetOutApplicationLogValidFlagで出力する、しないを変更できる
ということがわかりました。

私はDxLibの初期化、終了をするクラスを作成していたので、
初期化処理のDxLib_Initの前にSetOutApplicationLogValidFlagを追加したのですがLog.txtは相変わらず出力されます。。。

main文でSetOutApplicationLogValidFlagを呼ぶとLogの出力はされなくなるのですが、出来ればクラスの中にまとめちゃいたいです。

ということで質問です。
  • クラス内でのSetOutApplicationLogValidFlagは有効なのか
  • 有効である場合、私のコードでは何がいけないのか
よろしくお願いします。

以下コード

コード:

//DxClass.cpp 
//.hは省略、、、
DxClass::DxClass(const std::string &title)
{
	this->Init(title);
}

DxClass::~DxClass()
{
	DxLib_End();
}

bool DxClass::Init(const std::string &title)
{
	enum
	{
		CW,
		WI,
		ALV,
		WT,
		DI,
		SD,
		NUM,
	};
	bitset<NUM> flag;

	flag[CW] = ChangeWindowMode(TRUE) == 0;
	flag[ALV] = SetOutApplicationLogValidFlag(FALSE) == 0;
	flag[WI] = SetWindowIconID(IDI_MAINICON) == 0;
	flag[WT] = SetWindowText(title.c_str()) == 0;
	flag[DI] = DxLib_Init() == 0;
	flag[SD] = SetDrawScreen(DX_SCREEN_BACK) == 0;
	auto a = (bool)flag[ALV];//a=trueになるので失敗はしてない?
	return flag.all();
}

//Main.cpp
#include"DXClass.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 
{
	//SetOutApplicationLogValidFlag(FALSE); ここで関数を呼び出すとLogは出ない
	DxClass obj;
オフトピック
横着してコンストラクタでInitを呼び出してるんですけど、こういうのは明示的に呼びだしたほうがいいんですかね?^^;
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

アバター
みけCAT
記事: 6225
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: [DxLib]メンバ関数内でのSetOutApplicationLogValidFlagの挙動について

#2

投稿記事 by みけCAT » 2年前

DXライブラリ Ver3.17a、GCC 4.8.1で実験をしたところ、
ChangeWindowModeの前にSetOutApplicationLogValidFlagを呼び出した場合

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	SetOutApplicationLogValidFlag(FALSE);
	ChangeWindowMode(TRUE);
	DxLib_Init();
	DxLib_End();
	return 0;
}
はLog.txtが生成されませんでしたが、
ChangeWindowModeの後にSetOutApplicationLogValidFlagを呼び出した場合

コード:

#include <DxLib.h>

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
	ChangeWindowMode(TRUE);
	SetOutApplicationLogValidFlag(FALSE);
	DxLib_Init();
	DxLib_End();
	return 0;
}
はLog.txtが生成されました。
メンバ関数の中でもこの仕様は変わらないと予想できます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)


アバター
purin52002
記事: 235
登録日時: 2年前
連絡を取る:

Re: [DxLib]メンバ関数内でのSetOutApplicationLogValidFlagの挙動について

#4

投稿記事 by purin52002 » 2年前

DxLib_InitだけでなくChangeWindowModeより前に呼ぶ必要があったんですね^^;
リファレンスは呼んだのですがChangeWindowModeが全然見えていませんでしたorz

お騒がせしました。
みけCATさん、Mathさんありがとうございます。
無事解決です^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^

返信

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