Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
03 Гость
|
Добавлено: Чт Май 22 2003 16:53 Заголовок сообщения: Проблема с API writeFile |
|
|
var buf: array of char; {код} buf[1]:='f'; procedure TForm1.SaveData(bufd: pointer; Count: dword); var i: dword begin windows.WriteFile(f,bufd, 5, i,nil) end; begin savedata(@buf,1); end;
Проблема в том что в файл сохраняется символ далеко не 'f', а черт чего. Хотя
begin writeFile(f,'f',1,i, nil); end; работает великолепно. Естественно я опустил createFile, CloseHandle; |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Борис Гость
|
Добавлено: Чт Май 22 2003 17:23 Заголовок сообщения: Re: Проблема с API writeFile |
|
|
Я ни на паскале под винды, ни на дельфи практически не писал. Писал на си++. Но проблема выглядит так: buf -- это уже указатель, и когда ты даешь savedata(@buf,1);, ты передаешь в процедуру адрес указателя, то есть указатель на указатель, а не адрес buf[1], который ты хочешь передать. Попробуй savedata(buf,1); или удлиненный (по времени исполнения и написанию) savedata(@buf[1],1); |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Valera Гость
|
Добавлено: Пт Май 23 2003 07:48 Заголовок сообщения: См. ответ Бориса. + пояснение (+) |
|
|
строки в дельфи хряняться в виде record = p:pointer указатель на собственно строку s:longint размер строки array of char собственно строка. причем последний вообще хранится где-то в другом месте. когда пишешь buff или @buff то это аналогично @р, поэтому надо писать @buff[1]. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|