トップページ > 過去ログ > 記事閲覧
リソースのみのDLLからDxLibを使用した画像表示
名前:くま 日時: 2010/03/09 17:08

リソースを含んだDLLをLoadLibraryで呼び出して インスタンスハンドルを取得したあと そこに含まれているリソースをDxLibで扱いたいのですが良い方法ないでしょうか。 (LoadGraphToResourceやLoadSoundMemByResourceのように扱いたい) FindResource、LoadResourceでリソースの先頭アドレスを取得したところからでもいいのですが・・・ LoadGraphToResource(HMODULE,ResourceName,ResourceType) というように作れればと思います。

Page: 1 |

Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.1 )
名前:管理人 日時:2010/03/15 23:46

現在の LoadGraphToResource は必ずデフォルトのインスタンスハンドルを使用してリソースを取ってこようとするので、 その際に使用するインスタンスハンドルを変更するための関数を追加してみました // リソースを読み込む際に使用するモジュールを設定する( NULL を指定すると初期状態に戻ります、デフォルトでは NULL ) int SetResourceModule( HMODULE ResourceModule ) ; 機能は注釈の通りです、LoadGraphToResource や LoadSoundMemByResource を使用する前にリソースが含まれたDllの インスタンスハンドルを SetResourceModule に渡して呼んでやってください というわけで、よろしければこの機能を追加したバージョンをお使いになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.2 )
名前:くま 日時:2010/03/17 19:52

管理人様 ありがとうございます! これでexeが重くならずにすみそうです。 早速使用させて頂きます。
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.3 )
名前:くま 日時:2010/03/18 20:39

たびたびすみません。 早速使用してみましたがLoadGraphToResourceは LoadGraphToResource(int ResourceID)のみ動作するのでしょうか。 LoadGraphToResource( const char *ResourceName, const char *ResourceType ) で実行すると-1がかえってきてしまいます。 例えば以下のようなコードです。 g_hdll = LoadLibrary("data.dll"); int ret = SetResourceModule(g_hdll);//g_hdllはインスタンスハンドル int hImg0 = LoadGraphToResource(IDR_BMP17); int hImg1 = LoadGraphToResource(MAKEINTRESOURCE(IDR_PNG17),"PNG"); int hImg2 = LoadGraphToResource(MAKEINTRESOURCE(IDR_JPG17),"JPG"); 上記のコードですと ret ・・・ 0 hImg0 ・・・ アドレス値 hImg1 ・・・ -1 hImg2 ・・・ -1 使い方が悪いのかもしれませんが よろしければご教授頂けないでしょうか。
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.4 )
名前:管理人 日時:2010/03/22 01:46

いえ、LoadGraphToResource( const char *ResourceName, const char *ResourceType )も使えます 使い方も間違っていないはずです 私は一度読み込むリソースを登録する際にリソースタイプを "PNG" としてしまい( リソースタイプ名に " を加えてしまった )、 LoadGraphToResource( MAKEINTRESOURCE( IDR_PNG1 ), "\"PNG\"" ) ; としなければならなくなったことがありますが、このケースでは無いでしょうか?
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.5 )
名前:くま 日時:2010/03/24 16:44

管理人様 ご連絡ありがとうございます。 確認してみましたが、そこではなさそうでした。 こんな感じで定義してたので間違ってないかと。 IDR_PNG17 PNG "H:\\... #defineの定義された名前が他のリソースと混同してないかもチェックしましたが大丈夫そうでした。 ちょっとこちらの環境での違いがわからないのでとりあえずもう少しもがいてみます。 ありがとうございました。
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.6 )
名前:管理人 日時:2010/03/29 06:40

くまさんと同じ開発環境でこちらでもリソースを含むDLLを使うサンプルを作って見たいと思いますので よろしければお使いの開発環境を教えていただけないでしょうか?
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.7 )
名前:くま 日時:2010/03/30 11:30

管理人様 ありがとうございます。 以下当方の環境です。 OS:Windows vista ultimate 32bit コンパイラ:vs2008 professional Win32 アプリケーションプロジェクト 変更点は Multi-threaded (/MT) Use Multi-Byte Character Set ぐらいです。 DLLはemptyプロジェクトに/NOENTRY オプションを付けて作成。 あとは上記のコードを作成して実行しています。 お手数おかけして恐縮です。 足りない情報等ありましたらまた御願いします。
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.8 )
名前:管理人 日時:2010/04/05 01:39

ご返答ありがとうございます 私も vs2008 standard を所有していたので試してみました 結果、ライブラリのバグでした orz SetResourceModule に渡されたインスタンスハンドルを使うべき箇所が3箇所あるのに 1箇所でしか使っていないのが原因でした ( 引数が一つの LoadGraphToResource では使うべき箇所が1箇所だったので大丈夫だった ) 修正版をアップしましたので、よろしければお試し下さい m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: リソースのみのDLLからDxLibを使用した画像表示 ( No.9 )
名前:くま 日時:2010/04/07 13:57

管理人様 対応ありがとうございました。 修正版で動作確認しました。 お手数をおかけ致しまして大変恐縮です。 ありがとうございました。

Page: 1 |