Страница 1 из 1
Как правильно искать модуль по имени функции?
Добавлено: 07.05.2014 14:29:04
mirk
Столкнулся с тем, что некоторые функции определены различно в windows и в jwa*, некоторые функции присутствуют только в jwa*.
С чем связано такое? Из какого модуля правильнее вызывать функцию?
Re: Как правильно искать модуль по имени функции?
Добавлено: 07.05.2014 15:50:37
Vadim
mirk писал(а):некоторые функции определены различно в windows и в jwa*
Например, какие?
Я, если чего-то нет в Windows, спокойно беру в jwa. Вообще-то кардинальных различий быть не должно, т.к., в конечном итоге, они обращаются к одним и тем же DLL-кам...
Re: Как правильно искать модуль по имени функции?
Добавлено: 07.05.2014 16:34:46
mirk
Например, какие?
Берем для примера
getVersionExwindows:
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: Как правильно искать модуль по имени функции?
Добавлено: 07.05.2014 19:28:02
Vadim
mirkЭто всё большая политика.

Такой код компилируется без малейших проблем:
Код: Выделить всё
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 как он есть в натуре.
