|
|
|
Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как «свернуть» программу в трей.
3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
… (продолжение следует) …
Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка — 60 дней. Последующие попытки бан.
Мат в разделе — бан на три месяца…
Бред и I/O Error 1784
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Отлаживаю программу и ловлю сию ошибку. В отладчике смотрю значение переменных и вижу: Эврика определяет это как AV. Сообщение отредактировано: northener — 02.01.11, 23:11 |
northener |
|
Эврика была права. |
CodeMonkey |
|
И что это было? |
northener |
|
Цитата CodeMonkey @ 04.01.11, 03:34 И что это было?
Не могу воспроизвести эту ситуацию. Сейчас Эврика тоже рапортует |
RuSA |
|
Расшифровка 1784 ошибки такая: «Имеющийся буфер не подходит для указанной операции» Видимо что-то не так с открытием файла FF (или с устройством, на котором открыт файл). А то что подсказака для Nc «не то» отображает — дык: Вот такие соображения. |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0211 ] [ 16 queries used ] [ Generated: 9.02.23, 19:57 GMT ]
← →
Германн ©
(2011-01-03 02:06)
[0]
Отлаживаю программу и ловлю сию ошибку. В отладчике смотрю значение переменных и вижу:
Значение twDoors.Items.Count равно 6.
http://pikucha.ru/895034
А значение Nc в в параметрах цикла for 0.
http://pikucha.ru/895034
Это бред!
В поисковиках искал описание ошибки I/O Error 1784, но ничего путного не нашел.
Это не пойми чего.
Эврика определяет это как AV.
Так что задам я этот вопрос и на «сырцах».
← →
Германн ©
(2011-01-03 02:10)
[1]
Блин. Значение Nc показано в http://pikucha.ru/895035
← →
Palladin ©
(2011-01-03 02:15)
[2]
описания var для NameCtrl и второго шорта нет, SizeOf(ShortString) даст 255, телепатор телепатирует о более короткой переменной, отсюда 1784
а чего скриншоты то одинаковые? )
← →
Германн ©
(2011-01-03 02:25)
[3]
> Palladin © (03.01.11 02:15) [2]
>
> описания var для NameCtrl и второго шорта нет, SizeOf(ShortString)
> даст 255, телепатор телепатирует о более короткой переменной,
> отсюда 1784
>
>
Описания будут представлены, если в этом будет нужда. Твой телепатор врёт телепируя о «более короткой переменной». Переменная типа ShortString всегда имеет размер 256 байт.
← →
Palladin ©
(2011-01-03 02:27)
[4]
) ну 256 так 256, раз нужды нет
← →
Andy BitOff ©
(2011-01-03 03:17)
[5]
Вот, блин, народу не спится, да еще и третьего января. =))
Сорри за оффтоп.
← →
Ляпа
(2011-01-03 04:11)
[6]
Rewrite(FF,1);
← →
Ляпа
(2011-01-03 04:17)
[7]
procedure BlockWrite(var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
Description
F is an untyped file variable, Buf is any variable, Count is an expression of type Integer, and AmtTransferred is an optional variable of type Integer.
BlockWrite writes Count or fewer records to the file F from memory, starting at the first byte occupied by Buf. The actual number of complete records written (less than or equal to Count) is returned in AmtTransferred.
The entire block transferred occupies at most Count * RecSize bytes. RecSize is the record size specified when the file was opened (or 128 if the record size was unspecified).
← →
uw ©
(2011-01-03 10:03)
[8]
А TCtrl — это точно класс?
← →
Anatoly Podgoretsky ©
(2011-01-03 13:47)
[9]
> Германн (03.01.2011 02:06:00) [0]
Не знаю как ты искал, но у меня 10 of 677,000 results
← →
Anatoly Podgoretsky ©
(2011-01-03 13:51)
[10]
Только нафига искать в Интернет, там же утонешь, когда с Дельфи поставляется MS SDK
1784L ERROR_INVALID_USER_BUFFER
← →
Германн ©
(2011-01-03 19:40)
[11]
> 1784L ERROR_INVALID_USER_BUFFER
Не знаю причем тут невалидный буфер, но Эврика была права. Это действительно AV.
Забыл что в отличии от TListView у TTreeView в списке Items присутствуют все ноды, а не только ноды верхнего уровня. for i:=0 to twDoors.Items.Count-1 do begin
Door:=TDoor(twDoors.Items[i].Data);
И не у всех нод в свойстве Data записан указатель на класс TDoor.
← →
Anatoly Podgoretsky ©
(2011-01-03 20:25)
[12]
AV это следствие неправильного адреса (буфера) или его размера.
← →
Германн ©
(2011-01-04 01:25)
[13]
> Anatoly Podgoretsky © (03.01.11 20:25) [12]
>
> AV это следствие неправильного адреса (буфера) или его размера.
Кто бы спорил. Но при чем тут I/O Error?
Или это ещё одна инкарнация AV?
Т.е. обращаемся к классу по невалидной ссылке. И в процедуре BlockWrite обращение к полю этого класса вызывает AV, которое переводится Дельфи как I/O Error 1784? Час от часу не легче.
P.S. Наверно пора учить стримы раз паскалевские методы работы с файлами могут давать такие сообщения об ошибках.
← →
Ляпа
(2011-01-04 01:35)
[14]
> паскалевские методы работы с файлами могут давать такие
> сообщения об ошибках.
Легко:
var
FF:File;
P:^ShortString;
begin
AssignFile(FF,"D:TestTestTest2");
Rewrite(FF,1);
p:=nil;
BlockWrite(FF,p^[0],SizeOf(ShortString));
CloseFile(FF);
end;
← →
Германн ©
(2011-01-04 01:40)
[15]
> Ляпа (04.01.11 01:35) [14]
>
>
> > паскалевские методы работы с файлами могут давать такие
> > сообщения об ошибках.
>
> Легко:
>
Прощай Паскаль! Здравствуй Embarcadero!
Вот только нет уверенности, что Дельфи последних версий не даст мне такого же «смутного» сообщения о такой же ошибке при работе со стримами.
← →
Ляпа
(2011-01-04 01:55)
[16]
> Вот только нет уверенности, что Дельфи последних версий
> не даст мне такого же «смутного» сообщения о такой же ошибке
> при работе со стримами.
Хрен редьки не слаще. ИМХО.
← →
Германн ©
(2011-01-04 01:59)
[17]
> Ляпа (04.01.11 01:55) [16]
>
>
> > Вот только нет уверенности, что Дельфи последних версий
> > не даст мне такого же «смутного» сообщения о такой же
> ошибке
> > при работе со стримами.
>
> Хрен редьки не слаще. ИМХО.
Утешил, блин.
← →
Anatoly Podgoretsky ©
(2011-01-04 08:29)
[18]
> Кто бы спорил. Но при чем тут I/O Error?
I/O к тому, что это работа с паскалевскими файлами ввода вывода (I/O)
а 1784 это код, который вернул ОСовская функция, и это лучше чем безликое AV
> All errors other than I/O errors and fatal errors are reported
> with the error codes returned by the operating system.
← →
Anatoly Podgoretsky ©
(2011-01-04 08:31)
[19]
> Германн (04.01.2011 01:40:15) [15]
Смутно когда получишь ошибку AV, а не конкретно про буфер. В случае ошибки
1784 ты именно ее получишь и от потоков. И паскалевский и потоковый
ввод/вывод опираются на ОС
← →
Ляпа
(2011-01-04 19:23)
[20]
> Anatoly Podgoretsky © (04.01.11 08:31) [19]
>
> > Германн (04.01.2011 01:40:15) [15]
>
> Смутно когда получишь ошибку AV, а не конкретно про буфер.
> В случае ошибки
> 1784 ты именно ее получишь и от потоков.
Вот только в случае с BlockWrite ошибка 1784 сама в руки придёт, а от потоков ему ещё придётся её выковыривать -)
Форум программистов Vingrad
Модераторы: Poseidon, Snowy, bems, MetalFan |
Поиск: |
|
io error 1784, записать в файл свой тип данных |
Опции темы |
KasheyBro |
|
||
Новичок Профиль Репутация: нет
|
Вылезает IO error 1784, где косяк? Это сообщение отредактировал(а) KasheyBro — 26.11.2009, 04:48 |
||
|
|||
Frees |
|
||
Эксперт Профиль
Репутация: 9
|
описание ошибки, может поможет Это сообщение отредактировал(а) Frees — 26.11.2009, 08:39 ——————— Кольцов Виктор Владимирович |
||
|
|||
KasheyBro |
|
||||
Новичок Профиль Репутация: нет
|
Frees: да я это уже видел, чет мыслей по этому поводу нет
— так прекрасно пишет/читает файл
— io error 1784. На self._data[i] ругается. Или может свой тип данных можно как-то по другому записать? |
||||
|
|||||
Keeper89 |
|
||
Эксперт Профиль Репутация: 20
|
KasheyBro, попробуйте убрать self.. Как вариант, можно сделать файл типизированным. ——————— Cogito, ergo sum Keeper’s blog |
||
|
|||
Teleport |
|
||
Опытный Профиль
Репутация: 3
|
Не уверен, в ответе — но все же я просто убрал перед data знак подчеркивания, что он меня смутил, потому как вначале стоит. Может в нем дело?? Или я не в ту степь ушел?
Этот код откомпилировался без проблем. Это сообщение отредактировал(а) Teleport — 27.11.2009, 00:21 ———————
|
||
|
|||
pei7a |
|
||
Новичок Профиль Репутация: нет
|
это ошибка возникает когда пишешь данные не соответствующих типов в буфер |
||
|
|||
|
Правила форума «Delphi: Общие вопросы» | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) |
0 Пользователей: |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
Hi, I have written a service application in delphi 2007 to get updates from our Amazon S3 file folders. Its pretty simple, it has a CHRON style timer so basically when its between certain hours (usually 1am until 6am) it downloads a file from Amazon S3, stops a service (Firebird server), unzips the file and replaces the old one held locally. It then restarts the firebird service. All simple stuff but I have had a few clients report the same problem. The Service crashes with I/O error 1784. I think its not downloading the file and hence cant save it. It only happens when proxy servers are in place. And like I say, most clients work fine. The service is logged on as Local System account. Here is where it gets tricky. I want to use IE as opposed to the third party download components as i have a lot of clients (300+) and if I use my download comps i have to set proxy settings and store them securely for every client that uses a proxy. So if I use IE to do it then usually IE has the proxy setup and of course I can test this by manually downloading my file from Amazon S3 on the clients server using IE. I used some code from Torry's delphi pages to do this: uses URLMon, ShellApi; function DownloadFile(SourceFile, DestFile: string): Boolean; begin try Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0; except Result := False; end; end; However this had a massive problem. IE downloads this to a cache usually (windows version dependant) c:windowssystem 32configsystemprofileappdatazlocalmicrosofttemporary internet files/content.ie5 etc. now the problem was that we give them about 4gb of data a week and the function above kept copies of all the cached files so in 10 weeks we were using 40Gb of temporary files! not good. So i changed the code. I had some more code from torrys delpi pages that downloads a text file into a string value without hitting the hard drive as a file (very useful for downloading a small text file of update dates or versions for example). function DownloadURL_NOCache(const aUrl: string; var s: String): Boolean; var hSession: HINTERNET; hService: HINTERNET; lpBuffer: array[0..1024 + 1] of Char; dwBytesRead: DWORD; begin Result := False; s := ''; // hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try if Assigned(hSession) then begin hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0); if Assigned(hService) then try while True do begin dwBytesRead := 1024; InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead); if dwBytesRead = 0 then break; lpBuffer[dwBytesRead] := #0; s := s + lpBuffer; end; Result := True; finally InternetCloseHandle(hService); end; end; finally InternetCloseHandle(hSession); end; end; but this doesnt download a file but interestingly has a flag of INTERNET_FLAG_RELOAD so i ended up using this code i adpated, it works fine but like i say when there is a proxy involved even though i can download the file with IE (with the proxy settings) it returns I/O error 1784 because there is no file to save. function GetInetFile(const fileURL, FileName: String): boolean; const BufferSize = 1024; var hSession, hURL: HInternet; Buffer: array[1..BufferSize] of Byte; BufferLen: DWORD; f: File; sAppName: string; begin Result:=False; sAppName := 'SyncService.exe'; hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); try hURL := InternetOpenURL(hSession, PChar(fileURL), nil,0,INTERNET_FLAG_RELOAD,0); try AssignFile(f, FileName); Rewrite(f,1); repeat InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); BlockWrite(f, Buffer, BufferLen) until BufferLen = 0; CloseFile(f); Result:=True; finally InternetCloseHandle(hURL) end finally InternetCloseHandle(hSession) end end; Can anyone see what is wrong with this code, why it might not use the proxy? or does the service have to be logged on by someone with special prvilages? Any help much appreciated. PS if anyone knows how to download using IE with proxy straight to the loacation with no cache at all used, even better as this still caches a copy under system profile before discarding. many thanks Andy