[C++/WinAPI] Port równoległy BEZ dodatkowych bibliotek

0

Chce napisać program, który ustawia stany poszczególnych bitów danych (D0-D7) portu równoległego. Podłączyłem sobie miernik do pinu 2 i masy (D0). Za pomocą NTPort czy WinIO wszystko działa, ustawiam stan wysoki, potem odpalam mój program.

    HANDLE hLPT = CreateFile("LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
    if(hLPT==INVALID_HANDLE_VALUE) cout << "Zly uchwyt" << endl; 
    char data = 0x00000000;     
    unsigned long ret;
    WriteFile(hLPT,&data,1,&ret,NULL);
    cout << GetLastError() << endl;
    CloseHandle(hLPT);

Stan na pinie nie zmienia się, GetLastError zwraca 87 czyli zły parametr. I co tutaj jest źle? W necie nie znalazłem żadnego działającego przykładu, chociaż wiele osób pisało że to powinno działać.

0

Sprawdź wartość ret po WriteFile, spróbuj dać Sleep przed CloseHandle i zastanów się, po co Ci flaga FILE_FLAG_OVERLAPPED.

0

i dowiedz sie co znaczy 87
FormatMessage
http://msdn2.microsoft.com/en-us/library/aa908810.aspx

0

Szczawik: ret zwraca oczywiście 0
sleep próbowałem
FILE_FLAG_OVERLAPPED oznacza że otworzymy port w trybie asynchronicznym czyli funkcja WriteFile od razu zwróci swój rezultat, jak bym dał w synchronicznym to się zawiesi bo będzie czekać na odpowiedź z "drugiej strony kabla"
reichel: No przecież napisałem że to znaczy "zły parametr"

0
msdn napisał(a)

If hFile was opened with FILE_FLAG_OVERLAPPED, the lpOverlapped parameter must not be NULL. It must point to a valid OVERLAPPED structure. If hFile was opened with FILE_FLAG_OVERLAPPED and lpOverlapped is NULL, the function can incorrectly report that the write operation is complete.

Poza tym, funkcja WriteFile nigdy nie będzie czekać na odpowiedź od drugiej końcówki, bo do tego służy ReadFile. Wysyłanie w trybie asynchronicznym oznacza, że system w razie czego nie będzie czekał na zwolnienie się miejsca w buforze przeznaczonym dla danych do wysłania, tylko zwróci od razu błąd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1