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

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

Странная работа GetModuleFileName с библиотеками


Страницы:   1 2

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.


Страницы:   1 2

Наверх

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