Главная страница
    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.45 MB
Время: 0.012 c
1-47562
Igorek
2002-06-24 23:43
2002.07.15
TypInfo.pas - недокументированные возможности


14-47736
drpass
2002-06-11 20:54
2002.07.15
Шахтер - выиграл ЧЕМПИОНАТ!!!


1-47358
Юра
2002-07-02 02:03
2002.07.15
System Menu


14-47802
abitur
2002-06-15 16:40
2002.07.15
Win2k (Глюки?, как с этим бороться?)


6-47636
Новенький в Делфи
2002-04-26 23:32
2002.07.15
Hyper terminal





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский