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

Вниз

Подскажите, как пользоваться winapi ф-ей ReadFile???   Найти похожие ветки 

 
zam ©   (2002-05-15 20:36) [0]

Не понимаю, как правильно в ф-ю ReadFile передать указатель на буфер приема данных.
При передачи туда PCHAR или String выскакивают ошибки.
Причем даже если выделять память под этот PChar.
Единственное, что у меня работает, это если передать туда строку объявленную следующим образом:
str : string[200];
Но тут естественно не удобно, что длина ограничена в 255 символов.
Подскажите как правильно с этим работать?


 
VuDZ ©   (2002-05-15 22:05) [1]

а ты передаешь саму строку или указатель на неё?
по идее, должно быть так:
str: PChar[255];
readed : integer;
...
ReadFile(hFile, @str, 255, @readed, nil);

а если не работает, то посмотри код ошибки, которую возвращает getLastError();


 
KaPaT ©   (2002-05-15 22:22) [2]

а хелп недано почитать?


 
zam ©   (2002-05-15 23:03) [3]

По поводу str: PChar[255] впервые вижу такую запись, у меня такое Delphi переваривать не хочет.
Да и как можно указателю на char задавать какой-то размер?
Нет, если строка объявлена как str : string[200], то str является указателем на статически выделенную память, поэтому если передавать в качестве буфера эту строку, все работает хорошо.

Но задача состоит в том, чтобы создать буфер динамически после того, как узнаешь, сколько символов находится в файле.

Если писать так:
var
strx: PChar;

begin
getmem(strx,1000);
ReadFile(h1,strx,count,DWORD(Read),nil)
FreeMem(strx,1000);

То выскакивает runtime error access violation
Хотя я не вижу тут ошибок.
Вот рабочий пример MSDN:

lpszBuffer = (LPSTR) GlobalAlloc(GPTR,
lstrlen((LPSTR) achID) + cbMessage);
fResult = ReadFile(hSlot1,lpszBuffer,cbMessage,&cbRead,
(LPOVERLAPPED) NULL);

По-моему мой код полностью идентичен MSDN"овскому.

А по поводу таких полезных советов, как почитать хелп, советуйте в других конференциях.



 
SPeller ©   (2002-05-16 00:49) [4]

А по-моему проще так:

var buf:array of byte;
...

setlength(buf,n);
ReadFile(hFile, buf[0], n, readed, nil);


 
zam ©   (2002-05-16 01:18) [5]

Большое спасибо, действительно не додумался:))))


 
Ворчун   (2002-05-16 02:00) [6]

2 VuDZ © (15.05.02 22:05)
> str: PChar[255];
Для МАСТЕРА - непозволительны такие глупости!



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

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

Наверх




Память: 0.48 MB
Время: 0.021 c
3-47144
Jony
2002-06-18 16:03
2002.07.15
Работа с картинками *.jpg в Delphi/MS SQL


14-47744
Song
2002-06-11 14:16
2002.07.15
Сегодня тут один сломал мою прогу, да ещё написал мне об этом


3-47177
Прохожий
2002-06-19 11:16
2002.07.15
stack overflow при закрытии программы! ???


14-47782
Ajax
2002-06-13 23:55
2002.07.15
Мдя... :-(


1-47430
Alexander
2002-07-02 13:52
2002.07.15
Пытаюсь зашифровать файл функцией EncryptFile.