プロが教えるわが家の防犯対策術!

以前、下のような質問をさせていただいたものです。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1748227

EXE(実行形式)で既にあるプログラムをDLLとして移植したいのですが、うまくいきません。うまくいかない事象は上のページで質問しましてまだ解決しておりません。(ウインドウ内にCreateDialogを用いてダイアログを表示させようとしても表示されない)

実行形式で組まれたプログラム(ソース)をDLLに移植する時の一般的な方法、注意すべきところ、そのままソースを移植してもダメな理由(EXEとDLLの違い)などありましたら教えてください。同じようなことをした経験のある方など、よろしくお願い致します。

A 回答 (3件)

ダイアログのリソースがDLLにないのに、DLLのインスタンスを渡してもリソースが見つかるはずがないので、リソースのある方のインスタンスハンドルを渡さないとだめですよね。


リソースはどちらにありますか。

リソースがどちらにもないのに、いずれかのインスタンスを渡してもリソースが見つかるはずがないので、リソースをいずれかに追加しないとだめですよね。
リソースは追加されていますか。

リソースのIDが異なっているのに、そのIDで探しに言っても正しいリソースが見つかるはずがないので、正しいリソースハンドルを使わないとだめですよね。
追加しているリソースのIDは、ヘッダのものと一致していますか。
(EXEとDLLは別プロジェクトになりますが、正しく一致していますか)

この回答への補足

>追加しているリソースのIDは、ヘッダのものと一致していますか。

一致しているのですが、表示されません。よろしくお願い致します。

補足日時:2006/06/27 12:17
    • good
    • 0

hInstance に渡されているハンドラは「誰の」ハンドラですか?


ExeからDLLをロードした場合、ExeのハンドルとDLLのハンドルは違うのですが、どちらを渡していますか。

そして、対象ダイアログのリソースを持っているのは、
ExeとDLLのどちらですか。両者は一致していますか。

# あっていると思っても、ためしに別のハンドルを渡してみたら表示されたりしませんか。

この回答への補足

DLLのハンドルです。
両者が一致しているかはわかりません。(すみません)

補足日時:2006/06/21 15:40
    • good
    • 0

以前の質問に対する回答でほぼ解決できそうに見えますが、#3の方のご指摘などは確認されてますか?



> 実行形式で組まれたプログラム(ソース)を
-- snip --
> よろしくお願い致します。

リソースなどを参照する際のインスタンスが異なる、
スレッドが違う、など。

たぶん、具体的なコードを提示してもらった方が早いです。

この回答への補足

具体的にコードを出そうと思います。
extern "C" int WINAPI IOPI_Init(HINSTANCE hInstance, HWND hRootWnd, HWND hParentWnd)
{

hAppModule=(HMODULE)hInstance;

 HWND hDlgWnd = ::CreateDialog(
  hAppModule,
  MAKEINTRESOURCE(IDD_DIALOG1),
  hWnd,
  (DLGPROC)MyDlgProc);


以上、このようなところです。よろしくお願い致します。

補足日時:2006/06/20 11:52
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!