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

こんばんは。教えて!

excelからC++で作成しているdllを呼び出し、
dll内でダイアログを作成し表示したいと思っています。

問題は、CreateDialogで失敗(以下のコードでhDlgが0になる)することです。
hDlg = CreateDialog( NULL, MAKEINTRESOURCE(IDD_DIALOG) , NULL, (DLGPROC)DlgProc );

第一引数と第三引数に何かいれないといけない気がしていますが、いろいろ試行錯誤してもうまくいきません。
第一引数と第三引数はどこから引っ張ってくればよいでしょうか??

お願いいたします。

A 回答 (2件)

 実際コーディングした経験はないので、推測ですが…。



第一引数は GetModuleHandle か GetModuleHandleEx で持ってくれば良いのではないでしょうか。

第三引数は NULL でも良さそうな気がします。
    • good
    • 0

まず、第三引数は親となるウィンドウハンドルを指定しますが、NULL を指定するとデスクトップが親ウィンドウになるよう設定されますので、そのままでかまわないと思います。



ただ、第一引数で NULL を指定すると excel.exe 内にあるリソースを検索しますので、おそらく失敗すると思います(excel.exe 内にダイアログがあれば成功しますが・・・)。
VC++ で作っているのでしたら、
#if defined(__cplusplus)
extern "C"{
#endif
#if defined(_M_IA64)
#pragma section(".base", long, read)
__declspec(allocate(".base"))
#endif
const IMAGE_DOS_HEADER __ImageBase;
#if defined(__cplusplus)
}
#endif
として __ImageBase を定義して、(HINSTANCE)&__ImageBaseを指定すればよいと思います。
    • good
    • 0

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