Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
1-47471
ValeX
2002-07-03 16:34
2002.07.15
мат. вопрос


1-47570
AlexanderSK
2002-06-27 12:39
2002.07.15
TBDEClientDataSet в Delphi6


6-47637
JohnKZ
2002-05-04 09:29
2002.07.15
Help


1-47424
PycUS
2002-07-01 22:10
2002.07.15
Картинки


1-47353
nimble
2002-07-01 07:26
2002.07.15
ComboBox - Цвет




   Наверх