Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

Почему это до сих пор работало?   Найти похожие ветки 

 
TUser ©   (2008-05-12 11:07) [0]

Интересно, почему такой код работает? Конкретно, работает в 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-12 11:26) [1]


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


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


 
Leonid Troyanovsky ©   (2008-05-12 12:32) [2]


> TUser ©   (12.05.08 11:07)  

> Интересно, почему такой код работает?

Да уж, плотность ошибок впечатляет.

Дык, и что было понято?

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-05-12 13:06) [3]

В рубашке родился.


 
Игорь Шевченко ©   (2008-05-12 13:12) [4]


> Интересно, почему такой код работает?


потому что i принимает произвольное значение


 
Юрий Зотов ©   (2008-05-12 13:29) [5]

Не попробовать ли GetCurrentDir?
:о)


 
tesseract ©   (2008-05-12 20:17) [6]


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 зависит.


 
tesseract ©   (2008-05-12 20:18) [7]

чуть напутал, там понятно, где опечатался :-)


 
Юрий Зотов ©   (2008-05-12 21:38) [8]

Ужасно...
:-(


 
Leonid Troyanovsky ©   (2008-05-12 22:47) [9]


> tesseract ©   (12.05.08 20:18) [7]

Любопытно.
См. [1-5].

--
Regards, LVT.


 
Германн ©   (2008-05-13 00:52) [10]

Хм. Что для Юрия ужасно, то для Леонида любопытно. Что бы это значило?


 
XentaAbsenta ©   (2008-05-13 13:38) [11]

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.


 
XentaAbsenta ©   (2008-05-13 13:42) [12]

кстати в делфи 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;


 
Игорь Шевченко ©   (2008-05-13 13:49) [13]

XentaAbsenta ©

К чему этот поток сознания ?


 
XentaAbsenta ©   (2008-05-13 13:52) [14]

Удалено модератором
Примечание: Флудить завязываем


 
Юрий Зотов ©   (2008-05-13 14:48) [15]

> XentaAbsenta ©   (13.05.08 13:42) [12]

> кстати в делфи GetCurrentDir тоже не сильно хорошо сделана

function GetCurrentDir: string;
begin
 GetDir(0, Result);
end;

Это D7. При чем тут _LGetDir - непонятно.



Страницы: 1 вся ветка

Текущий архив: 2008.06.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
15-1209194604
USB
2008-04-26 11:23
2008.06.08
USB 1.1 или 2.0


15-1208856014
samalex
2008-04-22 13:20
2008.06.08
Установка символа разделения целой и дробной части числа


2-1210702537
TStas
2008-05-13 22:15
2008.06.08
Не рисуется на TPanel


3-1199661770
porter
2008-01-07 02:22
2008.06.08
получить несколько столбцов для одного поля


2-1210741269
noviceman
2008-05-14 09:01
2008.06.08
Уничтожение объекта из "своего" события.