代码之家  ›  专栏  ›  技术社区  ›  Paul

CreateWindow在user32.dll中已不存在

  •  1
  • Paul  · 技术社区  · 5 年前

    我发现了 CreateWindowA CreateWindowW 不存在于 user32.dll Windows 10的文件。你看到微软关于这件事的任何公告了吗?

    当我注意到Delphi的 Winapi.Windows 文件,它们被模拟。

    更新

    我似乎忽略了,在Delphi 6中,这些函数也是使用 CreateWindowEx 。也许David是对的,这些函数在Win16中只有DLL入口点。他们肯定不在Windows XP SP3中。

    1 回复  |  直到 5 年前
        1
  •  10
  •   David Heffernan    5 年前

    恐怕你问题的前提是不正确的。德尔福6 Windows 单元未链接到 CreateWindowW CreateWindowA 以下是这些功能的实际实现方式:

    function CreateWindow(lpClassName: PChar; lpWindowName: PChar;
      dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND;
      hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND;
    begin
      Result := CreateWindowEx(0, lpClassName, lpWindowName, dwStyle, X, Y,
        nWidth, nHeight, hWndPar, hMenu, hInstance, lpParam);
    end;
    function CreateWindowA(lpClassName: PAnsiChar; lpWindowName: PAnsiChar;
      dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND;
      hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND;
    begin
      Result := CreateWindowExA(0, lpClassName, lpWindowName, dwStyle, X, Y,
        nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
    end;
    function CreateWindowW(lpClassName: PWideChar; lpWindowName: PWideChar;
      dwStyle: DWORD; X, Y, nWidth, nHeight: Integer; hWndParent: HWND;
      hMenu: HMENU; hInstance: HINST; lpParam: Pointer): HWND;
    begin
      Result := CreateWindowExW(0, lpClassName, lpWindowName, dwStyle, X, Y,
        nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
    end;
    

    如您所见,这反映了它们在Windows头文件中的实现,如下所示 tenfour's answer .

    如果您的代码因尝试导入名为的函数而失败 CreateWindowW CreateWindowA user32 那么问题不在于 用户32 如果发生了变化,那么你的代码期望具有这些名称的函数存在是完全错误的。

        2
  •  7
  •   Remy Lebeau    5 年前

    CreateWindowA 是一个宏 CreateWindowExA ,以及 CreateWindowW 是一个宏 CreateWindowExW ,两者都存在于Windows 10上的user32.dll中。

    winuser.h :

    #define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,\
    nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
    CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y,\
    nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
    #define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y,\
    nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
    CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y,\
    nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)