Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Вниз

Подскажите, как пользоваться 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.07.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.011 c
3-47215
MOleg
2002-06-19 14:15
2002.07.15
Запрос к результата другого запроса


7-47814
konusov
2002-04-02 00:44
2002.07.15
Программно выключить компьютер


3-47062
::Hamster::
2002-06-18 13:01
2002.07.15
Точное значение reccount


3-47211
Eraser
2002-06-14 18:32
2002.07.15
Активная строка в DBCtrlGrid


1-47270
qd5
2002-06-28 23:52
2002.07.15
Вызов процедуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский