Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Эмуляция функций `CreateWindowA` и `CreateWindowW` в Delphi для Windows 10

Delphi , Синтаксис , Справочник по API-функциям

Эмуляция функций CreateWindowA и CreateWindowW в Delphi для Windows 10

В последнее время разработчики, работающие с Delphi и создающие приложения для Windows 10, столкнулись с интересной проблемой: функции CreateWindowA и CreateWindowW больше не существуют в файле user32.dll этой операционной системы. Однако, благодаря предусмотрительности команды Delphi, эти функции эмулируются в компоненте Winapi.Windows, что позволяет разработчикам продолжать использовать их в своих проектах.

Контекст проблемы

Пользователь обнаружил, что функции CreateWindowA и CreateWindowW не доступны в user32.dll на Windows 10. Это открытие было сделано после того, как он заметил, что в Delphi в файле Winapi.Windows эти функции эмулируются.

Обновление

После дополнительного изучения выяснилось, что в Delphi 6 эти функции также представлены в виде макросов, которые используют CreateWindowEx. Вероятно, David прав, и эти функции имели только точки входа в DLL в Win16, и они точно не существовали в Windows XP SP3.

Альтернативный ответ

В ходе обсуждения было отмечено, что даже в user32.dll версии 6.1.7601.24546 (Win7x64) нет экспорта имен этих функций, следовательно, Windows 10 не является первым случаем, когда это произошло. Предполагается, что эти функции никогда не экспортировались в Win32 и относятся к Win16. Возможно, пользователь перешел с Windows 3 на Windows 10, минуя промежуточные версии.

Подтвержденный ответ

Функции CreateWindowA и CreateWindowW на самом деле являются макросными обертками для функций CreateWindowExA и CreateWindowExW соответственно. Эти функции действительно существуют в user32.dll на Windows 10. Это подтверждается определением макросов в файле winuser.h.

Примеры кода

Примеры кода на Object Pascal (Delphi) показывают, что функции CreateWindow и т.д., используемые в Delphi, фактически вызывают соответствующие функции CreateWindowEx без дополнительных изменений в функциональности запросов типов строк, что видно в следующих определениях функций:

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, hWndParent, 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;

Таким образом, разработчики, привыкшие к использованию этих функций, могут продолжать их использовать, не заботясь о том, что внутренняя реализация изменилась. Это один из примеров, как эволюция API Windows может быть скрыта от конечного пользователя за счет эмуляции на стороне инструментов разработки, таких как Delphi.

Создано по материалам из источника по ссылке.

Разработчики Delphi для Windows 10 столкнулись с отсутствием функций `CreateWindowA` и `CreateWindowW` в `user32.dll`, но благодаря эмуляции в компоненте `Winapi.Windows` продолжают использовать их в своих проектах.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Справочник по API-функциям ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 19:09:18/0.005342960357666/1