Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с LPT. В D3 все работало, а в D5 ругается, вот пример кода [D3, D5, Win2k]


Cranium ©   (2002-11-13 01:12:00) 

В D3 все работало, а в D5 ругается....
[Error] UnitCon.pas(370): Types of actual and formal var parameters must be identicalВот пример кода


private
{ Private declarations }
public
{ Public declarations }
end;

var
PrintYes: Boolean;
FormCon: TFormCon;
FHandle: THandle;
FErrorString: PChar;
FPrinterOpen: Boolean;
FNumberOfBytesWritten: Integer;
NumberOfBytesToWrite: Integer;
OEMStr: PChar;

.............................
procedure TFormCon.OpenPort;
begin
FHandle := CreateFile("LPT1", GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ
or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if FHandle = INVALID_HANDLE_VALUE then
begin
if FErrorString <> nil then
LocalFree(Integer(FErrorString));
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
nil,
GetLastError(),
LANG_USER_DEFAULT,
@FErrorString,
0,
nil);
{SetErrorString; }
raise Exception.Create(FErrorString);
end
else
FPrinterOpen := True;
end;
procedure TFormCon.ClosePort;
begin
CloseHandle(FHandle);
if FErrorString <> nil then
LocalFree(Integer(FErrorString));
end;


Cranium   (2002-11-13 01:56:00) [1]

Ругается вот на это место...
if not WriteFile(FHandle, OEMStr^, NumberOfBytesToWrite,
FNumberOfBytesWritten,nil) then


Юрий Зотов   (2002-11-13 01:25:00) [2]

Еще бы знать, а на что же она ругается...
Уж не на это ли: Exception.Create(FErrorString)?
Ну тогда правильно ругается. А вот так не должна:
Exception.Create(string(FErrorString));

А вообще, то же самое пишется намного проще:

var
FHandle: THandle = 0;
FPrinterOpen: Boolean = False;

procedure TFormCon.OpenPort;
begin
FHandle := CreateFile(...);
FPrinterOpen := Win32Check(FHandle <> INVALID_HANDLE_VALUE)
end;

procedure TFormCon.ClosePort;
begin
CloseHandle(FHandle)
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо