Столкнулся с тем, что некоторые функции определены различно в windows и в jwa*, некоторые функции присутствуют только в jwa*.
С чем связано такое? Из какого модуля правильнее вызывать функцию?
Как правильно искать модуль по имени функции?
Модератор: Модераторы
Re: Как правильно искать модуль по имени функции?
mirk писал(а):некоторые функции определены различно в windows и в jwa*
Например, какие?
Я, если чего-то нет в Windows, спокойно беру в jwa. Вообще-то кардинальных различий быть не должно, т.к., в конечном итоге, они обращаются к одним и тем же DLL-кам...
Re: Как правильно искать модуль по имени функции?
Например, какие?
Берем для примера getVersionEx
windows:
function GetVersionEx(var lpVersionInformation: TOSVersionInfo): BOOL;external 'kernel32' name 'GetVersionExA';
jwanative:
function GetVersionEx(lpVersionInformation: LPOSVERSIONINFO): BOOL; stdcall;
Зачем вообще сделано такое разделение?
Добавлено спустя 4 минуты 49 секунд:
Вот еще пример: EnumServicesStatus
Там определены константы для удобства (например: SERVICE_STATE_ALL), но эти константы не определены в windows.
Идем дальше: QueryServiceConfig
Тоже отличия в определении вызывающие подобные ошибки при подключении не из того модуля (Error: Incompatible type for arg no. 4: Got "LongWord", expected "LPDWORD").
И так по многим функциям WinAPI.
Re: Как правильно искать модуль по имени функции?
mirk
Это всё большая политика.
Такой код компилируется без малейших проблем:
Так что модуль Windows Вам даёт возможность использовать оба варианта:
- типа Delphi;
- типа чистый WinAPI.
JWA* направлен более конкретно - симулировать WinAPI как он есть в натуре.

Это всё большая политика.
Такой код компилируется без малейших проблем:
Код: Выделить всё
Uses Windows;
Var
os1: TOSVERSIONINFO;
os2: LPOSVERSIONINFO;
begin
if Windows.GetVersionEx(os1) then
writeln(os1.dwMajorVersion, ' ', os1.dwMinorVersion);
os2:=GetMem(sizeof(TOSVERSIONINFO));
if Windows.GetVersionEx(os2) then
writeln(os2^.dwMajorVersion, ' ', os2^.dwMinorVersion);
end.Так что модуль Windows Вам даёт возможность использовать оба варианта:
- типа Delphi;
- типа чистый WinAPI.
JWA* направлен более конкретно - симулировать WinAPI как он есть в натуре.
