Имя: Пароль:
IT
 
Delphi. Коды ошибок и все-все-все.
0 H A D G E H O G s
 
12.02.15
22:47
Дня доброго.
Просто просьба: воспроизвести данный код и сообщить, какое значение примет переменная ErrorCode

procedure Test();
var
  i: integer;
  ErrorDescription: string;
  FileName:String;
  ErrorCode: int64;
  readFile:TFileStream;
begin
  try
  filename:='';
  readFile:=TFileStream.Create(FileName,fmOpenRead);
  readFile.Free;
  except
    on e: Exception do
    begin
      ErrorDescription := e.Message;
      ErrorCode := GetLastError;
ShowMessage(inttostr(ErrorCode));
    end;
  end;
end;

У меня она почему то в dll-ке принимает значение 0 (так и должно)/ в exeшнике - 123 (код неккорректного пути к файлу) что странно.
1 p-soft
 
13.02.15
00:10
запустить не на чем.
а почему 0 должно? имя вроде не совсем корректно..
и чем смотришь этот 0 в длл? в текст пишешь?
не могут быть в проектах (ехе и длл) версии библиотек разные?
2 Asmody
 
13.02.15
00:29
Закопайте стюардессу уже!
3 p-soft
 
13.02.15
00:31
тссс! она еще шевелится!
4 H A D G E H O G s
 
13.02.15
12:14
Подниму тему.
5 H A D G E H O G s
 
13.02.15
12:18
(1) 0 должен быть потому, что есть исполнение кода вида:
->readFile:=TFileStream.Create(FileName,fmOpenRead);
->raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(AFileName), SysErrorMessage(GetLastError)]);
-> SysErrorMessage()
-> Len := FormatMessage(
    FORMAT_MESSAGE_FROM_SYSTEM or
    FORMAT_MESSAGE_IGNORE_INSERTS or
    FORMAT_MESSAGE_ARGUMENT_ARRAY or
    FORMAT_MESSAGE_ALLOCATE_BUFFER, nil, ErrorCode, 0, @Buffer, 0, nil);

Вот этот FormatMessage() должен сбросить код ошибки в 0.
6 H A D G E H O G s
 
13.02.15
12:19
(1) 0 в dll я смотрю отладчиком.
7 H A D G E H O G s
 
13.02.15
12:33
Кирпич, что скажешь?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший