ページ 11

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

Posted: 2013年5月09日(木) 11:53
by bonbo
先日質問して、解決したと思ったのですが、解決していませんでした。
内容は
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
です。

よろしくお願いします。

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

Posted: 2013年5月09日(木) 15:05
by softya(ソフト屋)
読み込めないと言うのは、実行時エラーですか?
それなら、resource.rcのファイルパスが合っているか確認したほうが良いと思います。
IDB_PNG1等がフルパスになっているので大丈夫か気になります。

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

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

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

Posted: 2013年5月09日(木) 15:34
by softya(ソフト屋)
フルパスを止めてみては? フルパス以外は読み込めているんですよね?

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

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

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

Posted: 2013年5月09日(木) 15:57
by softya(ソフト屋)
pngが読み込めないんですね?

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

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

Posted: 2013年5月09日(木) 16:21
by bonbo
>これが参考になりますか?
「ゲームつくろ~質問箱 [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


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

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

Posted: 2013年5月09日(木) 16:43
by softya(ソフト屋)
resource.hは合っていると思います。
ポイントは引用サイトのこちらだと思います。
続いて.rcファイル(リソースファイル)に次の記述を追加します:

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

 ここで指定したPNGファイルをプロジェクトの直下に置きます。もし画像をフォルダにまとめたいのであれば、上のパス指定を例えば「pict/Test.png」などのように変更して下さい。

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

Posted: 2013年5月09日(木) 17:31
by bonbo
できました。
ありがとうございます。
>ポイントは引用サイトのこちらだと思います。
まさにその通りでした。ありがとうございます。
あとで見た人のために
一連の動作をまとめておきたいと思います。

・リソースに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屋さん何度もありがとうございました。

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

Posted: 2013年5月09日(木) 17:32
by bonbo
解決忘れてました。すみません。

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

Posted: 2013年5月09日(木) 17:34
by softya(ソフト屋)
bonbo さんが書きました:解決忘れてました。すみません。
ちなみに、リソースは手で書けばExpressでも利用可能です。
ResEditと言うフリーソフトもあります。