2012-08-09 80 views
0

我試圖調用WinAPI函數DialogBox()。在Microsoft website這個函數被指定在user32.dll中。但是,當試圖通過聲明它作爲從dll導入的函數來導入這個函數時,鏈接器告訴我它不在那裏。然後我試圖在C:\ Windows \ System32 \ user32.dll中找到依賴walker的函數,但函數不在那裏。 (儘管我可以看到所有其他奇特的函數文字。)什麼是這個原因,我該如何解決這個問題?如何在user32.dll中調用DialogBox()函數?

我正在使用D編程語言。標準庫中的Windows模塊不會導入WinAPI中的完整功能集。所以我有時候不得不手工進口東西。

+2

你在用什麼語言?如何導入WinAPI函數很大程度上取決於此,而且您沒有提供任何信息。如果你正確地標記你的問題,它可以幫助你更快得到答案。 (至少張貼你用來導入函數的代碼。) – 2012-08-09 14:32:54

+0

我正在使用D編程語言。但問題不是語言特定的。我嘗試使用「extern(Windows)INT_PTR DialogBoxA(HINSTANCE hInstance,LPCTSTR lpTemplate,HWND hWndParent,DLGPROC lpDialogFunc);」導入符號,但現在通過導入函數DialogBoxParamA()來代替並寫入DialogBoxA()包裝功能。 – 2012-08-09 17:05:08

回答

5

這很準確,沒有這樣的功能。從WinUser32.h SDK頭文件:

#define DialogBoxA(hInstance, lpTemplate, hWndParent, lpDialogFunc) \ 
DialogBoxParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L) 
#define DialogBoxW(hInstance, lpTemplate, hWndParent, lpDialogFunc) \ 
DialogBoxParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L) 

換言之,將C preprocesor重命名功能DialogBoxParam。這是你唯一可以捏造的一個。只要傳遞一個像宏一樣的零。

+0

現貨。謝謝。 – 2012-08-30 08:58:05