![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странная работа GetModuleFileName с библиотеками
Piter © (2005-08-18 22:15:00)Заметил странную особенность работы GetModuleFileName с библиотекой. Если для EXE'шников возвращаемая строка в имени файла учитывает регистр, например:
Result = '...\ Project1.exe
То для библиотек имя файла всегда в нижнем регистре:
Result = '...\library1.dll'
Даже если библиотека называется 'LiBrArY.dll'.
Почему так и самое главное - как побороть?
Не то, чтобы критически важно, но данное поведение немного снижает красоту плагиновой программы.
Piter (2005-08-20 12:02:00) [1]Leonid Troyanovsky © (19.08.05 21:29) [23]
А оно кому надо?
дык так красивее...
Leonid Troyanovsky (2005-08-19 21:29:00) [2]
> Piter © (19.08.05 21:19) [22]
> так какое решение? FindFirst получается...
>
> Разработчики других плагинов, как я посмотрел, просто приводят
> все к вернхнему регистру, что в общем тоже, конечно, ничего...
А оно кому надо?
--
Regards, LVT.
Piter (2005-08-19 21:19:00) [3]так какое решение? FindFirst получается...
Разработчики других плагинов, как я посмотрел, просто приводят все к вернхнему регистру, что в общем тоже, конечно, ничего...
Leonid Troyanovsky (2005-08-19 20:39:00) [4]
> Piter © (19.08.05 17:27) [20]
> Фишка как раз в том, чтобы можно было изменять имя DLL -
> и менялось название.
>
> А тут запихнуть строчк в ресурсы DLL, а потом ее извлечь
> :) Смысл-то какой...
>
> Я с таким же успехом могу константу внутри программы завести
> :)))
Соглашусь.
--
Regards, LVT.
Piter (2005-08-19 17:27:00) [5]Leonid Troyanovsky © (19.08.05 14:45) [9]
OriginalFilename or ProductName from Version Info
Блин... чего-то мы все тупим... А какой в этом смысл? :)
Фишка как раз в том, чтобы можно было изменять имя DLL - и менялось название.
А тут запихнуть строчк в ресурсы DLL, а потом ее извлечь :) Смысл-то какой...
Я с таким же успехом могу константу внутри программы завести :)))
alpet (2005-08-19 17:03:00) [6]Leonid Troyanovsky © (19.08.05 16:54) [18]
Угу, а когда способ не рабоатает, можно и [5] использовать.
Leonid Troyanovsky (2005-08-19 16:54:00) [7]
> alpet © (19.08.05 16:47) [17]
> Понятно, но в таком случае это особого отношения к оригинальному
> имени файла не имеет (хотя как правило с ним совпадает).
Красота требует жертв, бо могучая сила.
--
Regards, LVT.
alpet (2005-08-19 16:47:00) [8]Leonid Troyanovsky © (19.08.05 16:43) [14]
Понятно, но в таком случае это особого отношения к оригинальному имени файла не имеет (хотя как правило с ним совпадает).
alpet (2005-08-19 16:46:00) [9]Игорь Шевченко © (19.08.05 16:43) [15]
Дык перепутал треды ))
Игорь Шевченко (2005-08-19 16:43:00) [10]alpet © (19.08.05 16:40) [13]
Нафига ?
Leonid Troyanovsky (2005-08-19 16:43:00) [11]
> alpet © (19.08.05 16:37) [12]
> OriginalFilename or ProductName from Version Info.
>
> Это ведь ресурсы? Могут и отсутствовать, если их не позаботился
> встроить разработчик плагина.
Какие уж там заботы?
Зашел на соотв. вкладку в Project options.
Ну, и я как понял, Piter не хост делает.
--
Regards, LVT.
alpet (2005-08-19 16:40:00) [12]Копать наверняка надо в сторону GetThreadContext, и ReadProcessMemory.
alpet (2005-08-19 16:37:00) [13]OriginalFilename or ProductName from Version Info.
Это ведь ресурсы? Могут и отсутствовать, если их не позаботился встроить разработчик плагина.
Leonid Troyanovsky (2005-08-19 16:23:00) [14]
> Piter © (19.08.05 16:17) [10]
> На моем 2003 Server одинаково, т.е., не меняет регистр
>
> а ты именно на DLL проверял? На EXE и у меня не меняет...
Конечно, например, возвращает:
C:\WINDOWS\system32\compatUI.dll
--
Regards, LVT.
PS На 9х, IMHO, встречалась подобная чехарда.
Piter (2005-08-19 16:17:00) [15]Leonid Troyanovsky © (19.08.05 14:45) [9]
OriginalFilename or ProductName from Version Info
хм, идея - спасибо
На моем 2003 Server одинаково, т.е., не меняет регистр
а ты именно на DLL проверял? На EXE и у меня не меняет...
На NT4 также было, кажись
у меня WinXP SP2 pro
Leonid Troyanovsky (2005-08-19 14:45:00) [16]
> Piter © (19.08.05 14:22) [8]
> да, Lamer@fools.ua верно сказал.
Ну, дык используй
OriginalFilename or ProductName from Version Info.
> И вообще интересно - почему для EXE одно поведение, а для
> DLL другое :)
На моем 2003 Server одинаково, т.е., не меняет регистр.
На NT4 также было, кажись.
--
Regards, LVT.
Piter (2005-08-19 14:22:00) [17]Leonid Troyanovsky © (19.08.05 8:47) [6]
да, Lamer@fools.ua верно сказал.
И вообще интересно - почему для EXE одно поведение, а для DLL другое :)
Lamer@fools.ua (2005-08-19 10:42:00) [18]>> Leonid Troyanovsky © (19.08.05 08:47) [6]
Ну если файл называется SuperPuperCoolPlugin.dll, а в программе будет superpupercoolplugin.dll... Я так понял.
Leonid Troyanovsky (2005-08-19 08:47:00) [19]
> Piter © (18.08.05 22:15)
> Не то, чтобы критически важно, но данное поведение немного
> снижает красоту плагиновой программы.
Пардон, а как сие поведение снижает красоту?
--
Regards, LVT.
alpet (2005-08-19 07:42:00) [20]
{$APPTYPE CONSOLE}
var hLib: THandle;
s: Widestring;
ws: array [0..260] of WideChar;
fd: WIN32_FIND_DATAW;
begin
hLib := LoadLibraryA ('wwork.dll'); // wWoRk.dll
if hLib <> 0 then
begin
GetModuleFileNameW (hLib, @ws, 260);
WriteLn (hLib, ' ', ws);
FillChar (fd, sizeof (fd), 0);
FindFirstFileW (@ws, fd);
Writeln (fd.cFileName); // prints wWoRk.dll
end;
end.