Dowiedziałem się że dostęp do portu LPT bez sterowników jest "zabroniony" wiele osób sugeruje żeby użyć bibloteki "inpout32.dll". napisałem to, zdaje się, poprawnie - wiem że jeszce nic nie robi.. poza błedem tej treśći:
"The value of ESP was not properly saved across the function call"
Co mam zrobić?! oto felerny kod:
typedef USHORT (InPortType) (USHORT BasePort);
typedef void (OutPortType)(USHORT BasePort, USHORT value);
HMODULE hDLL;
InPortType* InPort = 0;
OutPortType*OutPort = 0;
{
hDLL = LoadLibrary("inpout32.dll");
Sleep(100);
if(!hDLL) { MessageBox(0,"nie mogę znaleść bibloteki \"inpout32.dll\"\nprogram zostanie zakończony","brak *.dll",0); return -1;}
InPort = (InPortType*)::GetProcAddress((HMODULE)hDLL,"Inp32");
OutPort=(OutPortType*)::GetProcAddress((HMODULE)hDLL,"Out32");
if(OutPort==0 ||
InPort==0)
{ MessageBox(0,"\"inpout32.dll\" jest nie poprawny!\nprogram zostanie zakończony","brak *.dll",0); return -1;}
}
Sleep(100);
//standardowy port szeregowy - chyba LPT
USHORT PortAddrerss = 0x378;
#define LPT_DATA 0x378
#define LPT_CONTROL LPT_DATA + 2
//Ustawienie wartości Value na porcie o adresie określonym przez PortAddress.
(*OutPort)(NULL, NULL);
lub
var
hLPT:HWND;
ret:dword;
data:integer; // tu będą zapisywane dane wysyłane na port
begin
hLPT:=CreateFile('LPT1',GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
data:=1; //00000001 binarnie czyli syg "1" na pinie zerowym (D0)
WriteFile(hLPT,data,1,ret,nil);
data:=8; // 00001000 binarnie czyli syg "1" na pinie trzecim (D3)
WriteFile(hLPT,data,1,ret,nil);
data:=0; // czyli wyzerowanie portu
WriteFile(hLPT,data,1,ret,nil);
CloseHandle(hLPT); //zamknięcie portu
end;
ale ten kod naturalnie nie może działaś bo - dostęp do portu jest zabrnoniony..
Może mi ktoś pomóc?