VisualStudio2010でリソースの読み込みについて

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

VisualStudio2010でリソースの読み込みについて

#1

投稿記事 by bonbo » 13年前

先日質問して、解決したと思ったのですが、解決していませんでした。
内容は
http://dixq.net/forum/viewtopic.php?f=3&t=13013
と同じで、
リソースが読み込めないということについてですが。
VSのリソースビューから
"リソースの追加"→"新規作成"で作成したリソースは読み込めるということは分かったのですが、
その他の方法("リソースの追加"→"インポート"など)で作成したリソースを読み込ませることができません。
何がいけないのでしょうか。

分かりにくいので状況をアップロードしておきます。(2010June以降のDirectXSDKが必要となります。ご了承ください。)
http://www1.axfc.net/uploader/so/2896319
画像の読み込みは
DRAW_GRAPHIC.hの18行目から行っています。

環境は
Windows7(64bit)
DirectX2010June
です。

よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VisualStudio2010でリソースの読み込みについて

#2

投稿記事 by softya(ソフト屋) » 13年前

読み込めないと言うのは、実行時エラーですか?
それなら、resource.rcのファイルパスが合っているか確認したほうが良いと思います。
IDB_PNG1等がフルパスになっているので大丈夫か気になります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: VisualStudio2010でリソースの読み込みについて

#3

投稿記事 by bonbo » 13年前

>soft屋さん
ありがとうございます。
>読み込めないと言うのは、実行時エラーですか?
そうです。テクスチャ(スプライトでしたっけ…)を作成した時に
返される値がNULLなのです。
>それなら、resource.rcのファイルパスが合っているか確認したほうが良いと思います。
IDB_PNG1等がフルパスになっているので大丈夫か気になります。
たしか、フルパスだと日本語が入ってしまってだめになるケースがあるのですよね。
それならパスはすべて英語なので大丈夫だと思うのですが、
一応、
C:\Users\Administrator.user-PC\Documents\Visual Studio 2010\Projects\spreiteExpandTest\spritetest\test0.png
です。
プロジェクト直下でインポートし、パスを直しました(test0.pngにした)が、だめでした…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VisualStudio2010でリソースの読み込みについて

#4

投稿記事 by softya(ソフト屋) » 13年前

フルパスを止めてみては? フルパス以外は読み込めているんですよね?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: VisualStudio2010でリソースの読み込みについて

#5

投稿記事 by bonbo » 13年前

>soft屋さん
ありがとうございます。
>フルパスを止めてみては? フルパス以外は読み込めているんですよね?
毎度素人ですみません…もしかするとまた勘違いしてるかもしれないのですが、フルパスというのは
C:\Users\Administrator.user-PC\Documents\Visual Studio 2010\Projects\spreiteExpandTest\spritetest\test0.png
みたいな長いパスのことであってるしょうか。
読み込めているbitmap1.bmpと同じディレクトリに入れて、インポートするとリソースビューのfilenameの所のパスがtest0.pngとなる、
のですが、これでも読み込めません。
まだどこかおかしいみたいです…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VisualStudio2010でリソースの読み込みについて

#6

投稿記事 by softya(ソフト屋) » 13年前

pngが読み込めないんですね?

これが参考になりますか?
「ゲームつくろ~質問箱 [One Topic All View / Re[4]: D3DXCreateTextureFromResource関数でpngファイルを読み込みたい / Page: 0]」
http://marupeke296.com/cgi-bin/cbbs/cbb ... P=R&KLOG=1
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: VisualStudio2010でリソースの読み込みについて

#7

投稿記事 by bonbo » 13年前

>これが参考になりますか?
「ゲームつくろ~質問箱 [One Topic All View / Re[4]: D3DXCreateTextureFromResource関数でpngファイルを読み込みたい / Page: 0]」
http://marupeke296.com/cgi-bin/cbbs/cbb ... P=R&KLOG=1
読ませていただきました。
全く同じ状況なのですが、
最後に

"リソースエディタで作ったリソースファイルを開けていろいろ試した結果、
リソースファイルにヘッダをつけていないという、なんとも初歩的なミスでした。"

となっているところで投げられてしまっていて、そこがよくわかりません。
2003や2005のVSはどうだったか知りませんが(もうExpress版しか手に入りませんし)、今はリソースファイルには自動的にresource.hがインクルードされるので..
リソースファイルにヘッダをつけるというのは…いったいどのヘッダなのでしょう…
"Windows XPまでのデスクトップへのフルパスは「C:\Documents and Settings\IKD\デスクトップ\***」と日本語パスが入ります。"
これは大丈夫だと思うのですが。
以下resource.h

コード:

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by resource.rc
//
#define IDB_BITMAP1                     103
#define IDB_PNG5                        109
#define IDB_PNG1                        114

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        115
#define _APS_NEXT_COMMAND_VALUE         40002
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

以下resource.rc

コード:

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

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// 日本語 (日本) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//

IDB_BITMAP1             BITMAP                  "bitmap1.bmp"

/////////////////////////////////////////////////////////////////////////////
//
// PNG
//

IDB_PNG1                PNG                     "test0.png"
#endif    // 日本語 (日本) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED


アップロードしたファイルと同じものですが、一応。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VisualStudio2010でリソースの読み込みについて

#8

投稿記事 by softya(ソフト屋) » 13年前

resource.hは合っていると思います。
ポイントは引用サイトのこちらだと思います。
続いて.rcファイル(リソースファイル)に次の記述を追加します:

  〔MyResource.rc〕
  ID_TESTPNG RCDATA DISCARDABLE "Test.png"

 ここで指定したPNGファイルをプロジェクトの直下に置きます。もし画像をフォルダにまとめたいのであれば、上のパス指定を例えば「pict/Test.png」などのように変更して下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

bonbo

Re: VisualStudio2010でリソースの読み込みについて

#9

投稿記事 by bonbo » 13年前

できました。
ありがとうございます。
>ポイントは引用サイトのこちらだと思います。
まさにその通りでした。ありがとうございます。
あとで見た人のために
一連の動作をまとめておきたいと思います。

・リソースにpngファイルを追加する方法。VS2010(Express版だとリソースファイルが作成できないのでpro限定でのやり方になりますが…)
基本的にはsoft屋さんが紹介してくださったhttp://marupeke296.com/cgi-bin/cbbs/cbb
と同じような感じですが、

1.リソースの作成
 ソリューションエクスプローラを右クリック→追加→新しい項目→リソースファイル。名前はresource.rcにします。
 resource.rcが作成され、自動的にresource.hも作成される。(作成されなければresource.hを作る。)
 resource.rcに

コード:

#include "resource.h"
 の記述の追加(VS2010なら最初から追加されているはず。)
2.プロジェクトに読み込みたいpngファイルを入れる(その際パスに日本語が入るとまずい)。
 ドラッグアンドドロップでもできるが、
 リソースビュー→resource.rcを右クリック→リソースの追加→出てきたウィンドウのインポートをクリック
 →読み込むファイルを選択。OKで追加
3.resource.rcを書き換える
 ソリューションエクスプローラのresource.rcを右クリック→ソースの表示 をするとresource.rcの内容が見られる。
 resource.rcのなかで

コード:

IDB_PNG1                PNG                     "test0.png"
 のようになっている箇所があるはず(IDB_PNG1はファイルのID。名前は違うかもしれない。と"test0.png"は読み込んだ画像の名前)
 その下に以下の記述を追加

コード:

IDB_PNG1                PNG                     "test0.png"
IDB_PNG1 RCDATA DISCARDABLE "test0.png" // ここを追加
 すると、リソースビューにRC_DATAファイルとカスタムデータが作成されて
 "test0.png"が読み込めるようになる。

分かりにくい…もっと簡単な方法があるかもしれません。
VS2012についてはわかりません。

soft屋さん何度もありがとうございました。

bonbo

Re: VisualStudio2010でリソースの読み込みについて

#10

投稿記事 by bonbo » 13年前

解決忘れてました。すみません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: VisualStudio2010でリソースの読み込みについて

#11

投稿記事 by softya(ソフト屋) » 13年前

bonbo さんが書きました:解決忘れてました。すみません。
ちなみに、リソースは手で書けばExpressでも利用可能です。
ResEditと言うフリーソフトもあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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