![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему это до сих пор работало?
TUser © (2008-05-12 11:07:00)Интересно, почему такой код работает? Конкретно, работает в Win2003/TurboDelphi и года три уже отработал в ВинХР/Delphi7. И только недавно на ХР стал выдавать ошибку, причем - при отладке из-под среды ошибки нет, а запустишь тот же экзешник - говорит, что нельзя писать куда-то, ошибка в ntdll.dll. Почему возникает исключение - понятно. Непонятно, почему только сейчас.
function CurDir: string;
var a: PAnsiChar;
i: integer;
begin
a := '';
GetCurrentDirectory (i, a);
GetMem (a, i);
GetCurrentDirectory (i, a);
result := a;
end;
Юрий Зотов (2008-05-13 14:48:00) [1]> XentaAbsenta © (13.05.08 13:42) [12]
> кстати в делфи GetCurrentDir тоже не сильно хорошо сделана
function GetCurrentDir: string;
begin
GetDir(0, Result);
end;
Это D7. При чем тут _LGetDir - непонятно.
XentaAbsenta (2008-05-13 13:52:00) [2]Удалено модератором
Примечание: Флудить завязываем
Игорь Шевченко (2008-05-13 13:49:00) [3]XentaAbsenta ©
К чему этот поток сознания ?
XentaAbsenta (2008-05-13 13:42:00) [4]кстати в делфи GetCurrentDir тоже не сильно хорошо сделана
procedure _LGetDir(D: Byte; var S: string);
{$IFDEF MSWINDOWS}
var
Drive: array[0..3] of Char;
DirBuf, SaveBuf: array[0..MAX_PATH] of Char;
begin
if D <> 0 then
begin
Drive[0] := Chr(D + Ord('A') - 1);
Drive[1] := ':';
Drive[2] := #0;
GetCurrentDirectory(SizeOf(SaveBuf), SaveBuf);
SetCurrentDirectory(Drive);
end;
GetCurrentDirectory(SizeOf(DirBuf), DirBuf);
if D <> 0 then SetCurrentDirectory(SaveBuf);
S := DirBuf;
{$ENDIF}
{$IFDEF LINUX}
var
DirBuf: array[0..MAX_PATH] of Char;
begin
__getcwd(DirBuf, sizeof(DirBuf));
S := string(DirBuf);
{$ENDIF}
end;
XentaAbsenta (2008-05-13 13:38:00) [5]ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/fileio/fs/getcurrentdirectory.htm
DWORD GetCurrentDirectory(
DWORD nBufferLength,
LPTSTR lpBuffer
);
Parameters
nBufferLength
[in] Length of the buffer for the current directory string, in TCHARs. The buffer length must include room for a terminating null character.
Германн (2008-05-13 00:52:00) [6]Хм. Что для Юрия ужасно, то для Леонида любопытно. Что бы это значило?
Leonid Troyanovsky (2008-05-12 22:47:00) [7]
> tesseract © (12.05.08 20:18) [7]
Любопытно.
См. [1-5].
--
Regards, LVT.
Юрий Зотов (2008-05-12 21:38:00) [8]Ужасно...
:-(
tesseract (2008-05-12 20:18:00) [9]чуть напутал, там понятно, где опечатался :-)
tesseract (2008-05-12 20:17:00) [10]
var a: PAnsiChar;
i: integer;
NeedSize:integer;
begin
a := null;
try
NeedSize:=GetCurrentDirectory (i, a);
if NeedSize=0 // опа она всегда случаеться GetLastError по вкусу
begin
Path:=''; // path var параметр
exit;
end;
GetMem (a, NeedSize);
GetCurrentDirectory (i, a);
path:=a; // path var параметр
finally
FreeMem(a);
end;
end;
Вроде так, Хотя FreeMem от версии Delphi зависит.
Юрий Зотов (2008-05-12 13:29:00) [11]Не попробовать ли GetCurrentDir?
:о)
Игорь Шевченко (2008-05-12 13:12:00) [12]
> Интересно, почему такой код работает?
потому что i принимает произвольное значение
Anatoly Podgoretsky (2008-05-12 13:06:00) [13]В рубашке родился.
Leonid Troyanovsky (2008-05-12 12:32:00) [14]
> TUser © (12.05.08 11:07)
> Интересно, почему такой код работает?
Да уж, плотность ошибок впечатляет.
Дык, и что было понято?
--
Regards, LVT.
Сергей М. (2008-05-12 11:26:00) [15]
> недавно на ХР стал выдавать ошибку
Знать звезды расположились по-другому)