Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi: GetLastError & FormatMessage: не работает

Автор: Schicout
Дата сообщения: 16.02.2003 11:58
Пытался разобраться с GIVEIO. Написал нечто, что делает In/Out. Ессно без GIVEIO WinXP меня красиво посылает сообщением типа "недопустимая инструкция". А вот при попытке открыть GiveIO (он запущен и работает) выдает ошибку 1231. Файла winnt.h у меня нет, единственное средство посмотреть что это такое - FormatMessage. Но он выдает мне пустую строку. Не подскажете, что я сделал неправильно?

program Project1;

{$APPTYPE CONSOLE}

uses
Windows, SysUtils;

function GetCursor: Integer;
asm
MOV DX, 3D4h
MOV AL, 0Fh
OUT DX, AL
INC DX
XOR EAX, EAX
IN AL, DX
end;

var
H: THandle;
E: Cardinal;
Msg: PAnsiChar;

begin
H := CreateFile('\\\\.\\GIVEIO', GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
E := GetLastError;
if H = INVALID_HANDLE_VALUE then
begin
if FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_ALLOCATE_BUFFER, nil, 0,
LANG_RUSSIAN, Msg, 0, nil) <> 0 then
Writeln ('ERROR_RESOURCE_LANG_NOT_FOUND');
Writeln ('Couldn''t access giveio device');
Writeln ('Error ', E, ': ', Msg);
Readln;
Halt;
end;
CloseHandle(H);
Writeln(GetCursor);
Readln;
end.

Добавлено
FormatMessage завершается корректно.
Автор: segev
Дата сообщения: 17.02.2003 03:12
во-первых не передается код ошибки из функции GetLastError, которую кстати имеет смысл вызывать только при неуспешном вызове CreateFile т.е. после проверки
if H = INVALID_HANDLE_VALUE

во-вторых нужно передавать не Msg, а @Msg.

в-третьих функция FormatMessage возвращает количество символов в описании ошибки

А вообще коды ошибок описаны в MSDN и лазить по winnt.h вовсе не к чему.

Кстати, зачем вся эта затея с ассемблером ?
Автор: Schicout
Дата сообщения: 17.02.2003 07:38
segev
Просто проверить: даст ли мне GiveIO безболезненно напрямую записать/прочитать порты ввода-вывода. А эта безболезненная функция фозвращает не то маску текстового курсора, не то еще чего, давно писал уже не помню, просто если ее вызвать ничего страшного не случится, а я буду знать, да, и записать и прочесть могу.

Спасибо за совет.

Цитата:
во-вторых нужно передавать не Msg, а @Msg.

Быват..., пример был на С, видимо не очень хорошо его понял.
Автор: WellKing1
Дата сообщения: 10.11.2008 09:12
test

Страницы: 1

Предыдущая тема: Keyboard HOOK


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.