Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Путь из dll к ней самой [D7, WinXP]


Ghost. ©   (2002-12-15 11:39:00) 

Воможно ли получить путь к dll из нее самой..


Reindeer Moss Eater   (2002-12-15 13:45:00) [1]

Проверил.
AppFileName из RxVerInf всегда возвращает полный путь к DLL.


Внук   (2002-12-15 13:24:00) [2]

Может и нерационально, но путь гарантированно можно получить через ToolHelp Functions.

Определить, какой процесс порожден Вашим Exe, перечислить все модули, используемые в этом процессе, найти нужную DLL, взять ее путь.
(Рихтер)

Может, можно и проще, да лениво после выходных :))


Reindeer Moss Eater   (2002-12-15 13:17:00) [3]

Вот кусочек из RxVerInf:
function AppFileName: string;
var FileName: array[0..255] of Char;
begin
if IsLibrary then begin
GetModuleFileName(HInstance, FileName, SizeOf(FileName) - 1);
Result := StrPas(FileName);
end
else Result := ParamStr(0);
end;


Что делаю я:
Пишу dll, которая экспортирует всего одну функцию.
Эта функция читает версию dll определяя имя файла с помощью AppFileName. Полученные данные пишутся в лог. Где бы ни лежала тестовая dll (естественно там где Windows её найдет), в лог пишутся верные данные о companyname, fileversion и проч.


sniknik   (2002-12-15 13:00:00) [4]

возможно, у меня dll лежит всегда рядом с exe. из другой(?) надо попробовать.


Ghost.   (2002-12-15 12:58:00) [5]


> Reindeer Moss Eater

А перелжи ее в c:\xxz\ например..хотя может имеет значение из чего вызывать..я же обманывать не буду..эта функция мне упорно возвращает путь к исполняемогу файлу который совсем не мой..а dll моя и надо чтобы она была от него как можно дальше..


Reindeer Moss Eater   (2002-12-15 12:54:00) [6]

Ghost. ©
Только что переложил DLL в system32 и это не помешало получить версию библиотеки


Ghost.   (2002-12-15 12:46:00) [7]


> Reindeer Moss Eater

Возражений нет пути не получается..:0(


Ghost.   (2002-12-15 12:45:00) [8]


> Reindeer Moss Eater

Ты получаешь путь если dll в одном и томже каталоге с исполняемым файлом...
The GetModuleFileName function retrieves the full path and filename for the executable file containing the specified module.


Reindeer Moss Eater   (2002-12-15 12:35:00) [9]

Ghost. ©
Этой самой функцией я получаю полный путь к моей DLL для того, что бы, например, прочитать ресурс с ее версией.
Какие есть возражения?



AlexKniga   (2002-12-15 12:35:00) [10]

%0
Для exe работает, для dll не проверял.


Ghost.   (2002-12-15 12:25:00) [11]


> Reindeer Moss Eater


> sniknik ©

Вы господа сначало справку почитайте какой путь возвращает эта функция..при всем уважении..


sniknik   (2002-12-15 11:48:00) [12]

делал так
function GetIniName: String;
var st: string;
begin
st:= StringOfChar(#0, 255);
GetModuleFileName(hInstance, PChar(st), 255);
GetIniName:= ExtractFilePath(st)+"*.Ini";
end;


Reindeer Moss Eater   (2002-12-15 11:43:00) [13]

GetModuleFileName


Наверх

Титульная страница Поиск, карта сайта Написать письмо