Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Смешиваем системы

5.4K
10 января 2004 года
kkip
16 / / 10.01.2004
Delphi:
прога должна проверить win32platform
и если там win9x (а не NT)
обратиться к registerserviceprocess (которого в NT нет, походу)
тобишь если запустить под 9x/МЕ, то должна вызвать ф-цию, а если под
NT/XP то идти далше. Но, видимо, функция определяется при запуске
программы, посему ХР сразу кричит, что нет такой ф-ции в KERNEL32.dll
Как мне воплотить задуманное?
Пробовал создать дополнительный модуль, который запускается главной
прогой, если она обнаружила 9х/МЕ, ProcID передается в параметрах.
Первый релиз провалился, тк у МЕ ProcID невлезает в интегер. Знаю шо
надо прибавить, но уже лень, потому что использовать лишние ехе-хи
нежелательно!

Посоветуйте чего-нить, плиз!
1.9K
10 января 2004 года
AviDen
91 / / 26.12.2003
Цитата:
Originally posted by kkip
Delphi:
прога должна проверить win32platform
и если там win9x (а не NT)
обратиться к registerserviceprocess (которого в NT нет, походу)
тобишь если запустить под 9x/МЕ, то должна вызвать ф-цию, а если под
NT/XP то идти далше. Но, видимо, функция определяется при запуске
программы, посему ХР сразу кричит, что нет такой ф-ции в KERNEL32.dll
Как мне воплотить задуманное?
Пробовал создать дополнительный модуль, который запускается главной
прогой, если она обнаружила 9х/МЕ, ProcID передается в параметрах.
Первый релиз провалился, тк у МЕ ProcID невлезает в интегер. Знаю шо
надо прибавить, но уже лень, потому что использовать лишние ехе-хи
нежелательно!

Посоветуйте чего-нить, плиз!



Эх, молодой человек! Ведь DLL потому и DLL, что они Dynamic Linking! А ты небось функцию RegisterServiceProcess вяжешь с DLL статически, т.е. объявляя в коде что-то типа

Function RegisterServiceProcess(dwProcessId: DWORD; dwType: DWORD): DWORD; StdCall; External 'kernel32.dll';

Ссылка на эту функцию лежит в самом экзешнике (ее туды пихает компоновщик), и виндоза при загрузке модуля, не находя ентой функции, ессно матерится. В то время как можно сделать так:

 
Код:
Type
  TRegisterServiceProcess = Function (dwProcessId: DWORD; dwType: DWORD): DWORD; StdCall;
Var
  RegisterServiceProcess : TRegisterServiceProcess;

...

  RegisterServiceProcess:= GetProcAddress(LoadLibrary('kernel32.dll'), 'RegisterServiceProcess');
  If Not Assigned(RegisterServiceProcess) Then ShowMessage('RegisterServiceProcess NOT FOUND!!!') Else RegisterServiceProcess(<ProcID>, <dwType>);
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог