Главная страница
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.025 c
1-47438
race1
2002-07-03 09:11
2002.07.15
file map


8-47603
CaspeRForeveR
2002-03-04 14:59
2002.07.15
Подскажите где можно скачать RxRichEdit.????


6-47624
Konsul
2002-04-28 14:20
2002.07.15
Звук через локальную сеть


14-47681
А.
2002-06-06 11:58
2002.07.15
D5 vs D6


1-47279
Deadlock
2002-06-19 03:35
2002.07.15
Потоки и глюки