![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
hinstance
ph0sgen © (2006-08-31 20:12:00)Доброго времени суток.
имеется код:
library liba;
uses
windows;
var
a:array[0..255] of char;
begin
getmodulefilename(hinstance,@a,255);
messagebox(0,a,a,0)
end.
вопрос:
почему если передать функции getmodulefilenamе 0 вместо hinstance
то выводится имя файла, который вызвал DLL?
как еи DLL самому определить hinstance, чтобы возвращалось имя DLL?
спасибо за внимание.
Игорь Шевченко (2006-08-31 23:23:00) [1]
> а каким образом происходит инициализация?
Джеффри Рихтер очень хорошо этот процесс описывает.
Eraser (2006-08-31 22:49:00) [2]> [2] ph0sgen © (31.08.06 22:29)
begin...end уже ведь дал наводку - см. модуль SysInit.pas.
ph0sgen (2006-08-31 22:29:00) [3]> begin...end
спасибо.
а каким образом происходит инициализация?
begin...end (2006-08-31 21:05:00) [4]> ph0sgen © (31.08.06 20:12)
> почему если передать функции getmodulefilenamе 0 вместо hinstance
> то выводится имя файла, который вызвал DLL?
Так и задумано. См. в справке описание GetModuleFileName, параметра hModule:
hModule
Identifies the module whose executable filename is being requested. If this parameter is NULL, GetModuleFileName returns the path for the file used to create the calling process.
> как еи DLL самому определить hinstance, чтобы возвращалось
> имя DLL?
Глобальная переменная HInstance инициализируется значением базового адреса загрузки исполняемого модуля (в данном случае -- библиотеки) в модуле SysInit.pas, который подключается автоматически. При загрузке DLL к моменту начала исполнения кода между begin и end эта переменная уже будет инициализирована. Поэтому приведённый Вами код корректен -- он сообщит как раз путь к файлу DLL. Только 255 лучше заменить на MAX_PATH.