![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странная работа GetModuleFileName с библиотеками
Piter © (2005-08-18 22:15:00)Заметил странную особенность работы GetModuleFileName с библиотекой. Если для EXE'шников возвращаемая строка в имени файла учитывает регистр, например:
Result = '...\ Project1.exe
То для библиотек имя файла всегда в нижнем регистре:
Result = '...\library1.dll'
Даже если библиотека называется 'LiBrArY.dll'.
Почему так и самое главное - как побороть?
Не то, чтобы критически важно, но данное поведение немного снижает красоту плагиновой программы.
alpet (2005-08-19 07:37:00) [21]Точнее until not Module32Next (h, me) or (result <> '');
alpet (2005-08-19 07:25:00) [22]1. The GetFullPathNamefunction retrieves the full path and file name of a specified file.
DWORD GetFullPathName(
LPCTSTR lpFileName,
DWORD nBufferLength,
LPTSTR lpBuffer,
LPTSTR* lpFilePart
);
Exported from kernel32.dll
2. Эти функции можно использовать для создания списка модулей, загруженых в АП процесса.
function GetModuleFileName2 (hMod: THandle): string;
var me: MODULEENTRY32;
h: THandle;
begin
result := '';
h := CreateToolHelp32Snapshot (TH32CS_SNAPMODULE, GetCurrentProcessId ());
if h = INVALID_HANDLE_VALUE then exit;
me.dwSize := sizeof (me);
if Module32First (h, me) then
repeat
if me.hModule = hMod then
result := me.szExePath;
until Module32Next (h, me) or (result <> '');
CloseHandle (h);
end;
</code
Piter (2005-08-18 22:48:00) [23]Что такое GetFullPatchName?
Про Module32First/Module32Next я вообще не понял.
alpet (2005-08-18 22:39:00) [24]1. Почему - видимо из-за того что dll.
2. Побороть, хм. ToolHelp32 Module32First/Module32Next, не дают решения сабжа? или GetFullPatchName?