ページ 1 / 1
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と言うフリーソフトもあります。