Winapi 如何调用user32.dll中的DialogBox()函数?

Winapi 如何调用user32.dll中的DialogBox()函数?,winapi,dllimport,dialog,user32,Winapi,Dllimport,Dialog,User32,我正在尝试调用WinAPI函数DialogBox()。在上,此函数被指定在user32.dll中。但是,当试图通过将此函数声明为要从dll导入的函数来导入此函数时,链接器告诉我它不存在。然后,我尝试在C:\Windows\System32\user32.dll中使用依赖项遍历器查找函数,但该函数不存在。(我可以看到所有其他奇特的函数文字。)原因是什么?我该如何解决这个问题 我用的是D语言。标准库中的windows模块不会在WinAPI中导入完整的函数集。因此,我有时不得不手工进口东西 这是准确的

我正在尝试调用WinAPI函数
DialogBox()
。在上,此函数被指定在user32.dll中。但是,当试图通过将此函数声明为要从dll导入的函数来导入此函数时,链接器告诉我它不存在。然后,我尝试在C:\Windows\System32\user32.dll中使用依赖项遍历器查找函数,但该函数不存在。(我可以看到所有其他奇特的函数文字。)原因是什么?我该如何解决这个问题


我用的是D语言。标准库中的windows模块不会在WinAPI中导入完整的函数集。因此,我有时不得不手工进口东西

这是准确的,没有这样的函数。从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预处理器将函数重命名为DialogBoxParam。那是你唯一能听到的。只需像宏那样传递一个零。

这很准确,没有这样的函数。从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预处理器将函数重命名为DialogBoxParam。那是你唯一能听到的。只需像宏那样传递一个零。

您使用的是什么语言?如何导入WinAPI函数在很大程度上取决于此,您没有提供任何信息。如果你正确地标记你的问题,它会帮助你更快地得到答案。(至少张贴您尝试用于导入函数的代码。)我使用的是D编程语言。但问题不在于具体的语言。我尝试使用“extern(Windows)INT_PTR DialogBoxA(HINSTANCE HINSTANCE,LPCTSTR lpTemplate,HWND hWndParent,DLGPROC lpDialogFunc);”导入符号,但现在通过导入函数DialogBoxParamA()并编写DialogBoxA()包装函数来解决问题。您使用的是什么语言?如何导入WinAPI函数在很大程度上取决于此,您没有提供任何信息。如果你正确地标记你的问题,它会帮助你更快地得到答案。(至少张贴您尝试用于导入函数的代码。)我使用的是D编程语言。但问题不在于具体的语言。我尝试使用“extern(Windows)INT_PTR DialogBoxA(HINSTANCE HINSTANCE,LPCTSTR lpTemplate,HWND hWndParent,DLGPROC lpDialogFunc);”导入符号,但现在通过导入函数DialogBoxParamA()并编写DialogBoxA()包装函数解决了问题。