- ベストアンサー
excelでdeclareしたdllからのCreateDialog
こんばんは。教えて! excelからC++で作成しているdllを呼び出し、 dll内でダイアログを作成し表示したいと思っています。 問題は、CreateDialogで失敗(以下のコードでhDlgが0になる)することです。 hDlg = CreateDialog( NULL, MAKEINTRESOURCE(IDD_DIALOG) , NULL, (DLGPROC)DlgProc ); 第一引数と第三引数に何かいれないといけない気がしていますが、いろいろ試行錯誤してもうまくいきません。 第一引数と第三引数はどこから引っ張ってくればよいでしょうか?? お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
実際コーディングした経験はないので、推測ですが…。 第一引数は GetModuleHandle か GetModuleHandleEx で持ってくれば良いのではないでしょうか。 第三引数は NULL でも良さそうな気がします。
その他の回答 (1)
- macchun
- ベストアンサー率50% (3/6)
まず、第三引数は親となるウィンドウハンドルを指定しますが、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を指定すればよいと思います。