Текущий архив: 2007.01.14;
Скачать: CL | DM;
Вниз
hinstance Найти похожие ветки
← →
ph0sgen © (2006-08-31 20:12) [0]Доброго времени суток.
имеется код:
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?
спасибо за внимание.
← →
begin...end © (2006-08-31 21:05) [1]> 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.
← →
ph0sgen © (2006-08-31 22:29) [2]> begin...end
спасибо.
а каким образом происходит инициализация?
← →
Eraser © (2006-08-31 22:49) [3]> [2] ph0sgen © (31.08.06 22:29)
begin...end уже ведь дал наводку - см. модуль SysInit.pas.
← →
Игорь Шевченко © (2006-08-31 23:23) [4]
> а каким образом происходит инициализация?
Джеффри Рихтер очень хорошо этот процесс описывает.
Страницы: 1 вся ветка
Текущий архив: 2007.01.14;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.012 c