「猫でもわかるプログラミング」の「第318章 カスタム・リソースをdll化する(http://www.kumei.ne.jp/c_lang/sdk4/sdk_318.htm)」を参考にしてカスタムリソースをDLL化したのですが、このDLLの利用がうまくできません。
参考にした「猫でもわかるプログラミング」ではFindResource()の第2引数にリソース名("WHAT"など)を利用できているのですが、私が今回作成したものでは「"#101"」などとリソースIDを数値で指定しなければNULLが帰ってきてしまいます。
DLL作成時の「resource.h」のインクルードもしているのですが、他に何か必要なことがあるのでしょうか。
「猫でもわかるプログラミング」に書かれているコードと自分の書いたものとを比較してみたのですが、悪い点が自分では見つけられませんでした。
そこで、何か原因として考えられるようなことがあればアドバイスよろしくお願いします。
もし、私の書いたコードを見てもらえるのであれば、
http://www.geocities.co.jp/SiliconValley-Oakland/1272/test.htm
にアップロードしましたので、よろしくお願いします。
開発環境:Windows2000、VC++6.0、SDK
Resource.hと,作ったリソースファイルを見せてもらわないと分かりません。(^^;
後、参考までにリソースのデータの取り方は、大きく分けて2通りあります。
数字のIDで取得するケース(MAKEINTRESOURCE(Code))と、
文字列で参照するケース("Data.gif")
等です。
基本的にその文字列を参照する場合は、文字列の定義をしなければいけません。
VCなら、リソースのプロパティに設定する場所があるので、そこに自分が指定したい文字列を定義してあげましょう。
正直、こういうのは、作った本人に聞きなさいよ。(--;
返信ありがとうございます。
>正直、こういうのは、作った本人に聞きなさいよ。(--;
確かにその通りなのですが、BBSが無くメールでの問い合わせになってしまいます。そこで、こちらのBBSならサンプルとして「猫でもわかるプログラミング」を提示している方もいるので解決していただけるかもしれないと思い投稿させていただきました。
FindResource()の第2引数をMAKEINTRESOURCE(IDR_ASexec)とすることで取り出すことができました。
しかし "IDR_ASexec" ではやはり駄目です。
FindResourceと#defineの定義(?)をよく読んでもう一度考え直してみると、MAKEINTRESOURCEマクロを使わないといけないのが当然のように思えます。「""」で囲ってしまうと文字列であり、文字列である場合#defineで定義した値に変換されることがないので、"#IDR_ASexec"は当然駄目。#をつけるかMAKEINTRESOURCEマクロを使うかする必要があるので、"IDR_ASexec"も駄目。
ということで、MAKEINTRESOURCE(IDR_ASexec)とする必要があると(自分の中で)結論がでました。
一応リソースファイルとヘッダファイルを書いておきます。
「resource.h」
#define IDR_ASexec 101
「resource.rc」
#include "resource.h"
#include "windows.h"
/////////////////////////////////////////////////////////////////
// EXE
IDR_ASexec EXE DISCARDABLE "res\\ASexec.exe"
ツイート | ![]() |