(C++)リソーススクリプトでifdefするには

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

(C++)リソーススクリプトでifdefするには

#1

投稿記事 by Ketty » 9年前

こんにちは。
いつもお世話になっています。Kettyです(^_^)

リソーススクリプト(.rcファイル)にて、
#ifdef _DEBUG~#else~#endifで、DebugビルドとReleaseビルドで、リソースするファイルを分岐する方法を教えてください。

私は、以下のように実験してみたのですが、
Debugビルドしても、#ifdefがtrueのケースのファイルがリソースされません。
なお、Releaseビルドすると、#elseのケースでリソースされることは確認できました。

どこが間違えているのでしょうか?
それとも根本的に、リソーススクリプトではこのような分岐は不可能なのでしょうか?
↓ここを見ると、できるように思えました。
http://fjiblog.cocolog-nifty.com/blog/2 ... -56d2.html

OS:Windows7 64bit HomeEdition
Visual Studio 2010 ExpressEdition
※DXライブラリを使っています。

Resource.rc

コード:

// Microsoft Visual C++ generated resource script.
//
#include "Resource.h"

#ifdef _DEBUG
// Debugビルド時はファイルAをリソースする
TEST_RESOURCE Text "A.txt"
#else
// Releaseビルド時はファイルBをリソースする
TEST_RESOURCE Text "B.txt"
#endif
Resource.h

コード:

#ifndef RESOURCE_H
#define RESOURCE_H

#ifdef _DEBUG
// Debugビルド時はAを使う
#define TEST_RESOURCE 100
#else
// Releaseビルド時はBを使う
#define TEST_RESOURCE 200
#endif

#endif
確認につかったメイン関数(Main.cpp)

コード:

#include "DxLib.h"		// DXライブラリ用
#include "Resource.h"	// リソース用

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	// DXライブラリのログ出力をしない
	DxLib::SetOutApplicationLogValidFlag( FALSE ) ;
	// ウィンドウモードで起動
	DxLib::ChangeWindowMode( TRUE ) ;
	// DXライブラリ初期化処理
	if( DxLib::DxLib_Init() == -1 ){ return -1 ; }

	// 画面表示の文字色を設定
	const int color = DxLib::GetColor( 255, 255, 255 ) ;

	// Debug or Releaseを画面に表示
#ifdef _DEBUG
	DxLib::DrawString( 0, 0, "Debugモード", color ) ;
#else
	DxLib::DrawString( 0, 0, "Releaseモード", color ) ;
#endif

	// アプリケーションのインスタンス ハンドルを取得する
	HINSTANCE hInst = GetModuleHandle( NULL ) ;
	if( hInst != NULL )
	{
		// リソースの種類はテキストファイル
		LPCTSTR pResourceType = "text";
		// 目的のリソースを探す
		HRSRC hRes = FindResource( hInst, MAKEINTRESOURCE( TEST_RESOURCE ), pResourceType ) ;

		// 見つかったかどうかを画面表示
		if( hRes == NULL )
		{
			DxLib::DrawString( 200, 200, "リソース不明ですorz", color ) ;  // Debugビルドすると必ずここに来てしまう
		}
		else
		{
			DxLib::DrawString( 200, 200, "リソースあったよ!(^o^)", color ) ; // Releaseビルドするとここまに来れる
		}
	}

	// キー入力待ち
	WaitKey() ;

	// DXライブラリ終了処理
	DxLib::DxLib_End() ;

	// ソフトの終了 
	return 0 ;
}
なお、リソース用のファイルはA.txt、B.txtというただのテキストファイルで、どちらもプロジェクトファイルと同階層に設置しています。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: (C++)リソーススクリプトでifdefするには

#2

投稿記事 by h2so5 » 9年前

リソースファイルには_DEBUGは定義されていないので自分で設定してください。
debug.PNG

アバター
Ketty
記事: 102
登録日時: 10年前

Re: (C++)リソーススクリプトでifdefするには

#3

投稿記事 by Ketty » 9年前

>h2so5 さん
ありがとうございます。教えていただいた方法で解決しました。
なるほど、_DEBUGキーワードを自分で定義してやる必要があるのですね。

プロジェクト→○○(プロジェクト名)のプロパティより、
左側で、構成プロパティのリソース→全般を選んで、
右側で、プリプロセッサの定義に

_DEBUG;%(PreprocessorDefinitions)

を記述して適用ボタンクリックして、OKボタンをクリック

解決とさせていただきますm(__)m

閉鎖

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