| 
| 
 | Вопрос # 5 569/ вопрос закрыт / | 
 |  Здравствуйте, уважаемые эксперты!Подскажите, пожалуйста, как мне избавиться от ошибки Invalid pointer operation в этом коде.
 Закомментировав
 status := TBindStatusCallback.Create;
 я получаю работоспособный компонент, вот только callback мне нужен.
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим function DownloadFile(SourceFile, DestFile: string): boolean; begin  try    Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0,      status) = 0;  except    Result := False;  end;end;  procedure TLoadThread.Execute; var  SourceFile: string;begin  inherited;  status := TBindStatusCallback.Create;  SourceFile := srcadres + 'setup.exe';  DownloadFile(SourceFile, DestFile);  if DownloadFile(SourceFile, DestFile) then  begin   end  else   Synchronize(ShowResult);end; procedure TLoadThread.ShowResult; begin  ShowMessage(FResult);  ShellExecute(handle, 'open', DestFile, nil, nil, SW_NORMAL);end;
|  |   Вопрос задал: Daenoor (статус: Посетитель)Вопрос отправлен: 12 августа 2011, 12:43
 Состояние вопроса: закрыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 3; последнее сообщение — 12 августа 2011, 13:44; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 12 августа 2011, 13:19 [#1]:Посмотрел код. Ужаснулся. Как ещё компилятор не отказался это компилировать, даже не знаю. По поводу ошибки. Где именно она возникает? стек видно?
 Учитывая, как в коде создаются объекты, вы уверены, что на момент использования объекта status, он корректно инициализирован?
 
 событие OnProgress используется в главной форме?
 
 из попутных замечаний
 -
 const
  DestFile = 'c:\temp\setup.exe';в большом кол-ве случаев это будет неверно. Не факт, что папка temp существует и доступна на запись, да и не факт, что диск C есть в наличии. - переменные
 
 var
  handle: HWND;
  status: TBindStatusCallback;
  srcadres: string;первые кандидаты на проблемы. они должны быть членами какого то класса. - код
 
 {$I-}
    Reset(F1);
    Reset(F2);
{$I+}если сознательно отключаете проверку, то нужно самостоятельно проверить IOResult. Иначе бага вылезет где то позже и будете долго искать.
 - код
 
 TUpdater = class(TApplicationEvents)Зачем наследоваться от TApplicationEvents? Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Daenoor (статус: Посетитель), 12 августа 2011, 13:31 [#2]: status: TBindStatusCallback;
  srcadres: string;костыли, которые так и не заработали. 
 const
  DestFile = 'c:\temp\setup.exe';артефакт,который надо в свойство выносить. 
 TApplicationEventsпреподаватель сказал - я унаследовал отсюда. хотя можно и от TObject, ничего катастрофически не обрушится. |  
|   | min@y™ (статус: Доктор наук), 12 августа 2011, 13:44 [#3]: Цитата (Daenoor): преподаватель сказал - я унаследовал отсюда. хотя можно и от TObject, ничего катастрофически не обрушится.  Пипец. Преподы у вас там качественные, однако...
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  12 августа 2011, 17:36: Вопрос закрыт (решение принял автор вопроса — Daenoor): мой код говно,переписываем. Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |