![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Снова DOS Path [D7, XP]
AlexanderMS © (2006-05-31 16:56:00)Я уже задавал здесь такой вопрос: как превратить строку пути в формате DOS (7 букв + тильда ~ в каждой секции) в нормальный виндоузовский путь. Мне предложили GetLongPathName:
> function GetLongPathName(lpszShortPath, lpszLongPath: PChar;
> cchBuffer: DWORD): DWORD; stdcall; external 'kernel32.dll';
- я оставил на потом, а когда попробовал осуществить - ошибка в RunTime: точка входа ... не найдена. Так и не понял. Подскажите, пожалуйста, как?
AlexanderMS (2006-05-31 19:22:00) [1]Огромное спасибо! Всё получилось!
Джо (2006-05-31 18:24:00) [2]Например, так:
var
Longpath : array [0..MAX_PATH] of Char;
или выделять память динамически через GetMem и освобождать ее FreeMem, когда она уже не нужна.
begin...end (2006-05-31 18:22:00) [3]> AlexanderMS © (31.05.06 18:16) [3]
Вы не выделили память для буфера, связанного с LongPath.
AlexanderMS (2006-05-31 18:16:00) [4]Я сделал так:
procedure TWindow.FormActivate(Sender: TObject);
var
Longpath : PCHar;
begin
if (paramstr(1) <> '') and (filename = '')
then
begin
filename := paramstr(1);
GetLongPathName(PChar(filename), LongPath, 0);
Filename := String(LongPath);
readfile
end
else newfile
end;
Путь нормальный, а имя файла какое-то странное: Lбi вместо generals.csf. Вот и ошибка выдаётся. Как сделать то же с именем файла?
Джо (2006-05-31 17:02:00) [5]Т.е, например, так:
function GetLongPathName(lpszShortPath, lpszLongPath: PChar;
cchBuffer: DWORD): DWORD; stdcall; external 'kernel32.dll' name 'GetLongPathNameA'
Джо (2006-05-31 17:00:00) [6]GetLongPathNameA