Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как устранить ошибку при загрузке DLL? Разница в ОС!!! 
:(
    Опции темы
Nicholas
  Дата 21.1.2005, 06:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';

При загрузке в XP прога вылетает, ну нет там такой процедуры, мне надо чтобы этот код работал толко если Win XP, а когда другие он игранировался!

Или может есть другой способ?
PM MAIL ICQ   Вверх
Alex
Дата 21.1.2005, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 6
Всего: 162



Грузи библиотеку через LoadLibrary
Добавлено @ 07:28
http://vingrad.ru/VF-DLP-000739


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Girder
Дата 21.1.2005, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Цитата(Alex @ 21.1.2005, 07:26)
Грузи библиотеку через LoadLibrary
Ентого не достаточно smile . Для исключения ~100% случаев всякой бяки... smile перед вызовом LoadLibrary надо указать системе: не отображать окно сообщения, т.е.
Код
ErrOld:=SetErrorMode(SEM_NOOPENFILEERRORBOX or SEM_FAILCRITICALERRORS);
LoadLibrary(...);
...
FreeLibrary(...);
SetErrorMode(ErrOld);


Это сообщение отредактировал(а) Girder - 21.1.2005, 11:04


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Петрович
Дата 21.1.2005, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 15
Всего: 55



Цитата(Girder @ 21.1.2005, 11:24)
Ентого не достаточно  .

С каких это пор?
LoadLibrary может конечно вызвать окно сообщения, но только если возникает ОЧЕНЬ серьезная ошибка, напрмер грузим библиотеку с флопа, а флоп воткнуть забыли. В данном случае, речь идет о 'KERNEL32.DLL'. Трудно представить себе, что она окажется недоступна. Поскольку она являет собой основную Dll ядра системы, то реально, она всегда загружена в память. Соответственно, LoadLibrary всего навсего лишь подкрутит счетчик ссылок на нее.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
RA
Дата 21.1.2005, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Цитата(Nicholas @ 21.1.2005, 06:04)
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external


Этой функции в WinXP 2K нету !!!!! Только для 9x
PM   Вверх
Girder
Дата 21.1.2005, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Цитата
С каких это пор?
Ты и сам ответил smile . Плюс... кто тебе сказал, что LoadLibrary можно применять только для DLL. А если система ищет файл по путям и наткнулась на файл с таким же именем, но файл не является исполняемым(т.е. не DLL, PE и т.п.) или если библиотека испорчена - то что произойдет при попытки загрузить данный файл? Просто надо не забывать о хорошем тоне программирования.

Цитата
В данном случае, речь идет о 'KERNEL32.DLL'.
Имелось ввиду в общем случаи, а не конкретно kernel

Вот тебе пример:
-Скопирую любой не исполняемый файл(или испорченную DLL) в дирректорию данного примера и измени его имя на VVV.dll
Код

procedure TForm1.Button1Click(Sender: TObject);
var h:Cardinal;
   ErrOld:Cardinal;
begin
//ErrOld:=SetErrorMode(SEM_NOOPENFILEERRORBOX or SEM_FAILCRITICALERRORS);
h:=LoadLibrary('vvv.dll');
if h<>0 then FreeLibrary(h);
//SetErrorMode(ErrOld);
end;


Удачи.

Это сообщение отредактировал(а) Girder - 21.1.2005, 11:08


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
_hunter
Дата 21.1.2005, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



если нужно что бы код выполнялся только в определенной версии окон -- проверяй версию ;)
GetVersionEx()


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Петрович
Дата 21.1.2005, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 15
Всего: 55



Цитата(Girder @ 21.1.2005, 11:59)
А если система ищет файл по путям и наткнулась на файл с таким же именем, но файл не является исполняемым(т.е. не DLL, PE и т.п.) или если библиотека испорчена - то что произойдет при попытки загрузить данный файл?

Опс. Об этом как-то не подумал. Естественно, в общем случае такое вполне возможно, поэтому конечно надо защищаться.
Спасибо.
Вообще-то, для программы грамотно обрабатывающей ошибки, наверное лучше один раз, в начале, "сказать"
Код

ErrOld:=SetErrorMode(SEM_NOOPENFILEERRORBOX or SEM_FAILCRITICALERRORS);
и не париться smile.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Nicholas
Дата 22.1.2005, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



Цитата(RAdmin @ 21.1.2005, 10:53)
Этой функции в WinXP 2K нету !!!!! Только для 9x


Понятное дело нету, поэтому и спрашиваю как ошибку исключить - надо чтобы моя програ при запуске в 9х выполняла это функцию, а в XP, 2K другую. smile
Добавлено @ 12:52
ВСЕМ СПАСИБО!!!

Особенно за код отключения сообщений об ошибках.
PM MAIL ICQ   Вверх
_hunter
Дата 22.1.2005, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



тогда просто проверяй версию окон


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 22.1.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Nicholas все просто.

1. Убераеш объявление данной функции.
2. Используеш... типо... такой код.
Код
procedure BlaBlaBla();
type
TRSP=function (dwProcessId:DWord;dwType:DWord):DWord; stdcall;
var RegisterServiceProcess:TRSP;
     Kernel32:Cardinal;
begin
Kernel32:=LoadLibrary('Kernel32.dll');
if (Kernel32<>0) then
 begin
  RegisterServiceProcess:=GetProcAddress(Kernel32,'RegisterServiceProcess');
  if assigned(RegisterServiceProcess) then
   begin
    ShowMessage('Функции найденна... сейчас буду использывать!');
    if RegisterServiceProcess(0,RSP_SIMPLE_SERVICE)=1 then
     ShowMessage('Ok') else ShowMessage('Error');
     //и типо того и все такое
   end else
   begin
    ShowMessage('Функции нет!');
    //и типо того и все такое
   end;
  FreeLibrary(Kernel32);
 end;
end;

Удачи.

Это сообщение отредактировал(а) Girder - 22.1.2005, 19:07


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0593 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.