Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование WinApi функции WriteFile 
:(
    Опции темы
discens
Дата 26.3.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.3.2008

Репутация: нет
Всего: нет



Я начинающий Дельфи-программист, так что мой вопрос может кому-то покажеться наивным. Мне нужно понять какие параметры передавать в WinApi функцию WriteFile, а то когда я писал ниже приведённый код, то мне в файл какйю-то ерунду записало, наверное адрес
Код
procedure TForm1.Button1Click(Sender: TObject);
var P :PChar; hFile :THandle; ByteWritten : cardinal;
temp :string;
begin
    temp:='aaaaaaaaaaaaaaaaaaa';
    P:=@temp;
   hFile:= CreateFile('new.txt',GENERIC_READ or GENERIC_WRITE,
     FILE_SHARE_READ or FILE_SHARE_WRITE,nil,CREATE_ALWAYS,0,0);
     WriteFile(hFile,temp,sizeof(p),ByteWritten,0);
     CloseHandle(hFile);
end;

end.

также скажите можно-ли эти функции ReadFile и WriteFile использовать для записи и чтения устройства, на С-шный манер...
PM MAIL   Вверх
Rennigth
Дата 26.3.2008, 11:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 8
Всего: 76



discens, 
Код

var
  P :PChar; hFile :THandle; ByteWritten : cardinal;
  temp :string;
begin
  temp:='aaaaaaaaaaaaaaaaaaa';
  hFile:= CreateFile('c:\new.txt',GENERIC_READ or GENERIC_WRITE,
    FILE_SHARE_READ or FILE_SHARE_WRITE,nil,CREATE_ALWAYS,0,0);
  WriteFile(hFile, temp[1], Length(temp),ByteWritten, 0);
  CloseHandle(hFile);
end;



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
discens
Дата 27.3.2008, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.3.2008

Репутация: нет
Всего: нет



спасибо, помогло.
PM MAIL   Вверх
malor
  Дата 23.6.2011, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



>> WriteFile(hFile, temp[1], Length(temp), ByteWritten, 0);

Почему второй параметр temp[1], а не temp[0] или просто temp?

Цитата
lpBuffer 
A pointer to the buffer containing the data to be written to the file.


PM MAIL   Вверх
Snowy
Дата 23.6.2011, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Потому что у строк символы начинаются с 1, а не с нуля.
Почему не просто temp - temp это строка, а функция требует var параметр - первый байт буфера.
То есть она получает указатель на первый байт (var параметры передаются по ссылке).
temp же сам является указателем на первый байт. Так что, передав temp, как var параметр, мы передадим указатель на указатель. А нужно на буфер.
PM MAIL   Вверх
malor
  Дата 23.6.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Цитата(Snowy @  23.6.2011,  20:06 Найти цитируемый пост)
Потому что у строк символы начинаются с 1, а не с нуля.
Но ведь String это AnsiString ( при включенной {$H+}), а значит с нуля.
Архангельский А.Я., "Программирование в Delphi. Учебник по классическим версиям Delphi.", 2006г., стр. 869.
PM MAIL   Вверх
Snowy
Дата 23.6.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Ансистринг начинается с 1.
С 0 начинаются паскалевские шортстринги. Да и у тех 0 служебный.
Вряд ли Архангельский мог написать иное. Либо ты не так понял прочитанное.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.