![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Кто знает, почему при выгрузке ДИНАМИЧЕСКОГО МОССИВА в COM port, [D6, Win2k]
Лёша © (2003-04-25 16:36:00)в порт вместо данных прёт кача мусора?
Лёша (2003-04-25 18:06:00) [1]ВСЕМ С П А С И Б О!
Особенная благодарность MBo.
Вроде сдвинулось с места!
MBo (2003-04-25 17:12:00) [2]и FillChar(a[0], Length(a)*SizeOf(byte), $00);
MBo (2003-04-25 17:11:00) [3]WriteFile(hComm, a[0], 512, Bytes, nil);
Fiend (2003-04-25 17:11:00) [4]всё уже сказали (Дигитмэн) надо адрес буфера давать
р^
Zz_ (2003-04-25 17:11:00) [5]Почуствуй разницу (из windows.pas)
function WriteFile(hFile: THandle; const Buffer;nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
function WriteFileEx(hFile: THandle; lpBuffer: Pointer;nNumberOfBytesToWrite: DWORD;
const lpOverlapped: TOverlapped; lpCompletionRoutine: FARPROC): BOOL; stdcall;
Из WinApiHepl
BOOL WriteFile(
HANDLE hFile,
LPCVOID lpBuffer,file
DWORD nNumberOfBytesToWrite,
LPDWORD lpNumberOfBytesWritten,
LPOVERLAPPED lpOverlapped
);
BOOL WriteFileEx(
HANDLE hFile,
LPCVOID lpBuffer,
DWORD nNumberOfBytesToWrite,
LPOVERLAPPED lpOverlapped,
LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
);
уроды
Лёша (2003-04-25 17:02:00) [6]пример №1:
procedure TForm1.Button9Click(Sender: TObject);
var
a:array of byte;
Bytes:dword;
p:pointer;
begin
hComm:=CreateFile( PChar(Format("COM%1d", [1])),
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
SetLength(a,512);
FillChar(a, SizeOf(a), $00);
WriteFile(hComm, a, 512, Bytes, nil);
CloseHandle(hComm);
end;
пример №2:
procedure TForm1.Button9Click(Sender: TObject);
var
a:array of byte;
Bytes:dword;
p:pointer;
begin
hComm:=CreateFile( PChar(Format("COM%1d", [1])),
GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
SetLength(a,512);
FillChar(a, SizeOf(a), $00);
p:= @a;
WriteFile(hComm, p, 512, Bytes, nil);
CloseHandle(hComm);
end;
в обоих случаях прет мусор, если пишу в порт статический массив то, нет проблем, подскажите пожалуйста в чем ошибка...
Digitman (2003-04-25 16:40:00) [7]порт-то здесь причем ? скорей всего, фактические параметры, подставляемые тобой в ф-цию "выгрузки" не соответствуют формальным по типу ... это достаточно распространенная ошибка при передаче в кач-ве факт.параметра дин.массива (та, где требуется адрес буфера)
MBo (2003-04-25 16:39:00) [8]код?