|
Вопрос # 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): мой код говно,переписываем.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|