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

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

Почему это до сих пор работало?


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]


> недавно на ХР стал выдавать ошибку


Знать звезды расположились по-другому)


Наверх

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