Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.97.248] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Здраствуйте!
У меня вопрос такого плана: Существует ли возможность отследить загружена ли в память определенная Dll,ее имя зарание известно. Если кто знает, что существует такая возможность или где можно прочесть такую инфу, подскажите. Программирую на Delphi 5. Заранее спасибо! |
Сообщ.
#2
,
|
|
|
if GetModuleHandle('имя библиотеки') = 0 then
<библиотека НЕ загружена> else <библиотека загружена> |
Сообщ.
#3
,
|
|
|
У меня прблема такая : если DLL в папке с пргой не найдена, то вылезает сообщение Форточек о том, что не найдена DLL и прога не запускается
А можно ли зделать так, что ента ошибка не вылазела и прога запускалась, а уж из нее писать о ненайденой DLL |
Сообщ.
#4
,
|
|
|
Грузи динамически (LoadLibrary/SafeLoadLibrary + GetProcAddress)
|
Сообщ.
#5
,
|
|
|
СпасибоScorpy
Но не мог бы ты сказать об этом по подробней |
Сообщ.
#6
,
|
|
|
Kanes, очень просто.
type TMyProc = procedure(const N: Integer); stdcall; procedure TForm1.Button1Click(Sender: TObject); var MyProc: TMyProc; Lib: THandle; DLLName: string; begin DLLName := 'mydll.dll'; if FileExists(DLLName) then begin Lib := LoadLibrary(PChar(DLLName)); if Lib < HINSTANCE_ERROR then Win32Check(False); // или // ShowMessage('Не удалось загрузить библиотеку ' + DLLName); try MyProc := GetProcAddress(Lib, 'MyProc'); if Assigned(MyProc) then MyProc(123); finally FreeLibrary(Lib); end; end; end; |
Сообщ.
#7
,
|
|
|
Var LibHandle:Cardinal; Proc:Procedure(сдесь параметры если есть); ... LibHandle:=LoadLibrary('твоя dll'); If LibHandle<>0 Then Begin @Proc:=GetProcAddress('имя функции/процедуры'); Proc(параметры если есть); //вызов нужной функции/процедуры End; ... примерно так... |
Сообщ.
#8
,
|
|
|
Scorpy, твой код работать не будет.
GetProcAddress('имя функции/процедуры'); В GetProcAddress указывается еще и хэндл библиотеки. |
Сообщ.
#9
,
|
|
|
Цитата s-mike @ 1. Var ... Proc:Procedure(сдесь параметры если есть); Объявление такого рода компилятор не проглотит. Проглотит |
Сообщ.
#10
,
|
|
|
Цитата s-mike @ Объявление такого рода компилятор не проглотит. а у меня работает Цитата s-mike @ В GetProcAddress указывается еще и хэндл библиотеки пример собран на коленке, без IDE, чтобы показать принцип если идти дальше то и MyProc перед запуском на Nil нужно проверять |
Сообщ.
#11
,
|
|
|
Цитата Scorpy @ если идти дальше то и MyProc перед запуском на Nil нужно проверять Согласен, исправил |
Сообщ.
#12
,
|
|
|
s-mike,Scorpy
Огромное вам пасиба - ловите + |
Сообщ.
#13
,
|
|
|
Offtop: Необходим компонент user32.dll:updatelayeredwindow.
Для запуска программы необходим компонент 'user32.dll:updatelayeredwindow'. Я так понимаю, он отсутстует в версиях до 2000. Вопрос такой: возможно ли решить эту проблему в Windows Me? Или спасет только установка 2000/XP? Заранее спасибо. P.S Зашел на этот форум, т. к. имхо тут такие вопросы не будут звучать дико |
Сообщ.
#14
,
|
|
|
Цитата спасет только установка 2000/XP? |