![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Путь из 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