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

Вниз

Обращение к портам LPT через WinAPI   Найти похожие ветки 

 
Ксардас ©   (2005-09-09 05:36) [0]

Вот кусок кода:
procedure PortWrite(PortAddr:
word; Databyte: byte);
{$IFDEF WIN32}
assembler; stdcall;
asm
mov al,Databyte
mov dx,PortAddr
out dx,al
end;
{$ELSE}
begin
Port[PortAddr] := DataByte;
end;
{$ENDIF}

Собственно я знаю,что в ВинХР напрямую обращаться к портам нельзя.
Посему прошу подсказать кратчайший путь решения проблемы,указанной в заголовке. Тоесть,ечли с этим всё просто,то подскажите функцию,ну а ежели  нет,то хотяб с чего начать.


 
Джо ©   (2005-09-09 05:55) [1]

Напрямую нельзя. Можно "опосредствовано" функциями CreateFile,WriteFile,CloseHandle. Собственно, смотри документацию по ним.


 
tesseract ©   (2005-09-10 11:28) [2]


> Напрямую нельзя. Можно "опосредствовано" функциями CreateFile,WriteFile,CloseHandle.
> Собственно, смотри документацию по ним.


Можно но не нужно через что-то вроде SetIorivileges (точно название не помню извини)

Но можно в 2k/xp обращаться к драйверу (40-кратный прирост скорости!).

Но то же - не знаешь не лапай.

через WinApi:
function TEZPL.InitPort(Port:string):boolean;
var fport:pchar;
begin
// Не верим, что получится

Result:=false;_LastError:=ErrInterfaceError;
// если ком порт
fport:=PCHAR(port);
hCom:=CreateFile(fPort,GENERIC_READ OR GENERIC_WRITE,0,NIL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
 // Если неверен выходим
if hCom=INVALID_HANDLE_VALUE then exit;
FillChar(ReadOl,SizeOF(ReadOL),0);
ReadOl.hevent:=CreateEvent(nil,true,true,nil);
//end;
Result:=true;
_LastError:=ScOK;
end;

function tezpl._SendCommand(var cmd;length:cardinal):integer;
var
tmp,nb:cardinal;
succ:boolean;
begin
result:=-1;
_LastError:=ErrInterfaceError;
// Пишем команду
result:=_lastError;
succ:=true;
succ:=WriteFile(hCom,cmd^,length,nb,@readol);
if not succ then
           begin
           tmp:=GetLastError;
            if tmp=ERROR_IO_PENDING then
             if WaitForSingleObject(ReadOl.hEvent,1000)=WAIT_OBJECT_0 then
             begin
               if GetOverlappedResult(hCom, ReadOL, nb,false)  then  Succ:=true
             end
            end; // if not succ

// Обработка ошибок
if not succ then begin _LastError:=ErrCommandError; result:=_lastError; exit; end;
// Всё успешно
_LastError:=ScOK; Result:=0;
end;

procedure tezpl.ClosePort;
begin
//Пытаемся закрыться
if hCOM<>0 then
try
CloseHandle(hCom);
CloseHandle(ReadOl.hEvent);
hCOM:=0;
except
hCOm:=0;
end;


 
Ксардас ©   (2005-09-10 12:02) [3]


>
> Можно но не нужно через что-то вроде SetIorivileges (точно
> название не помню извини)

А где точно инфу насчёт сабжа найти не подскажите?


 
CHES ©   (2005-09-12 08:54) [4]

http://morgeyz.narod.ru/comlpt.htm
примеры на Ц, но разобраться вполне можно.
Лучше статьи на русском имхо нету.


 
Ксардас ©   (2005-09-12 16:54) [5]


> CHES ©   (12.09.05 08:54) [4]
> http://morgeyz.narod.ru/comlpt.htm
> примеры на Ц, но разобраться вполне можно.
> Лучше статьи на русском имхо нету.

Там ошибка на странице почти в самом конце.Это из-за чего?


 
Reindeer Moss Eater ©   (2005-09-12 17:36) [6]

Обращение к портам LPT через WinAPI [D7, WinXP]

Через WinApi - это CreateFile ReadFile и так далее.



Страницы: 1 вся ветка

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

Наверх





Память: 0.46 MB
Время: 0.033 c
9-1119916688
Xenon
2005-06-28 03:58
2005.11.13
Обновление темы, насчет скринов к моей игре


3-1127554610
hooky-mars
2005-09-24 13:36
2005.11.13
Access как сервер


3-1127371242
lightix
2005-09-22 10:40
2005.11.13
Выбор БД и средства разработки


14-1129748306
Bogdan1024
2005-10-19 22:58
2005.11.13
как программирование на вас влияет?


4-1124876130
Scordion
2005-08-24 13:35
2005.11.13
Как сделать форму поверх всех приложений?





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