【问题标题】:How do I call the DialogBox() function in the user32.dll?如何调用 user32.dll 中的 DialogBox() 函数?
【发布时间】:2012-08-09 14:04:50
【问题描述】:

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

我正在使用 D 编程语言。标准库中的 windows 模块不会在 WinAPI 中导入完整的函数集。因此,我有时不得不手动导入东西。

【问题讨论】:

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

标签: winapi dllimport dialog user32


【解决方案1】:

没错,没有这个功能。来自 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。这是你唯一可以pinvoke的。只需像宏一样传递一个零。

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 2012-10-14
    • 2019-04-26
    • 1970-01-01
    • 2020-12-13
    • 2010-12-05
    • 2013-12-09
    • 1970-01-01
    • 2012-03-23
    相关资源
    最近更新 更多