Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

директива компилятора   Найти похожие ветки 

 
Mistic ©   (2003-12-13 11:46) [0]

Есть ли директива компилятора которая используется для определения ОС Winnt. Например {IFDEFINE WINNT}? Или как не загружать статическую функцию ( function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external "KERNEL32.DLL"; ) которая не работает под NT?


 
y-soft ©   (2003-12-13 12:03) [1]

Нет такой директивы, да и какой в ней смысл - ведь действуют такие директивы только во время компиляции. Есть переменная Win32Platform в SysUtils

В зависимости от ее значения грузить и выполнять, но не статически, а динамически, через GetProcAddress...


 
Юрий Зотов ©   (2003-12-13 12:35) [2]

А если подумать?

Предположим, что такая директива есть. Что получится?

Директивы компилятора работают на этапе компиляции. Если Вы скомпилируете свою программу на машине с W9x, то вызов функции войдет в код. Но ведь исполняться эта уже скомпилированная программа может под любой системой - и под NT получим ошибку.

Говоря в более общем виде, компилятор работает под одной системой, а готовая программа может работать совершенно под другой. Значит, толку от подобных директив никакого и поэтому их, конечно, нет. Реальный смысл определения типа системы существует только в run-time и в модуле SysUtils для этого есть уже готовая переменная Win32Platform (а также Win32MajorVersion и другие).

Вывод - нужно определить прототип функции, а использовать ее надо через GetProcAddress. Можно сначала проверить Win32Platform, а можно даже и не проверять - если функция не будет найдена, GetProcAddress просто вернет nil.

type
TRegisterServiceProcess = function (dwProcessID, dwType: Integer): Integer; stdcall;

function TryRegisterServiceProcess(dwProcessID, dwType: Integer): boolean;
var
F: Pointer;
begin
F := GetProcAddress(GetModuleHandle("kernel32.dll"), "RegisterServiceProcess");
Result := F <> nil;
if Result then TRegisterServiceProcess(F)(dwProcessID, dwType)
end;


 
имя   (2003-12-13 12:43) [3]

Удалено модератором



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
6-86478
Alex134
2003-10-28 00:12
2003.12.26
Как узнать, существует ли пользователь с именем name?


3-86320
Frag
2003-11-29 14:00
2003.12.26
Загрузка из Excel`я в StringGrid боольшой таблицы


4-86587
Erazzer
2003-10-29 13:29
2003.12.26
Перехват видеодрайвера


14-86515
Clift
2003-12-03 23:28
2003.12.26
Образование


1-86433
Strage
2003-12-13 11:29
2003.12.26
Можно ли заменить цвет у clBtnFace?