Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизWinAPI Return Values and Errors Найти похожие ветки
← →
AlexeyITN (2004-04-01 16:33) [0]Доброго времени суток.
Уважаемые мастера, прошу меня извинить за слишком глупый вопрос, но но но...
Я думал без "этого" обойдусь, а шиш! Программирование как увлечение застопорилось. Вопрос: как правильно обрабатывать ошибки от винды и выдавать их результат юзеру. Например: есть функция, она возвращает 123 (при нуле - успех). Как эти "123" присобачить к конкретным строкам ошибок. Я не понимаю как использовать набор текстовых сообщений и набор кодовых ошибок возвращаемых, в случае не удачи, функцией. Подскажите. Возможно статьёй, ссылкой...Бьюсь как рыба об лёд...:(
Заранее благодарен!
← →
BiN © (2004-04-01 16:39) [1]Бьюсь как рыба об лёд...
sysutils->SysErrorMessage он же FormatMessage из кернел32
← →
AlexeyITN (2004-04-01 17:12) [2]спасибо! Пара вопросов.
- какая разница будет в написании SysErrorMessage и GetLastErorr, если сразу после функции написать SysErrorMessage ?
- как выводить результат функции при помощи GetLastErorr?
← →
BiN © (2004-04-01 17:17) [3]ты чего издеваешься?
так и пиши SysErrorMessage(GetLastError)
← →
AlexeyITN (2004-04-01 17:19) [4]да нет, не издеваюсь, ...я просто присваивал результат функции переменной result типа integer, а потом писал SysErrorMessage(result)
← →
AlexeyITN (2004-04-01 17:24) [5]Result := -1;
WMsg := ChaR("!");
MsgLen := Length(WMsg) * 2; // Unicode is 2-byte.
WMsgName := "-1-";
Result := NetMessageBufferSend(nil,
PWideChar(WMsgName), PWideChar(NameOfAdr),
PWideChar(WMsg), MsgLen);
If Result<>0 then
begin
ShowMEssage(SysErrorMessage(GetLastError));
end;
----------------------
Ответ винды: "Протекает наложенное событие ввода/вывода"
----------------------
смотрю MSDN:
----------------------
Return Values
If the function succeeds, the return value is NERR_Success.
If the function fails, the return value can be one of the following error codes.
Return code Description
ERROR_ACCESS_DENIED The user does not have access to the requested information.
ERROR_INVALID_PARAMETER The specified parameter is invalid.
ERROR_NOT_SUPPORTED This network request is not supported.
NERR_NameNotFound The user name could not be found.
NERR_NetworkError A general failure occurred in the network hardware.
-----------------
И как это понять: неужели мой английский настолько плох...или это мой delphi настолько?
← →
BiN © (2004-04-01 17:33) [6]net-функции сами возвращают код ошибки, а не getlasterror.
пиши типа If Result<>0 then
begin
ShowMEssage(Result);
end;
← →
VMcL © (2004-04-01 18:50) [7]>>AlexeyITN (01.04.04 16:33)
RaiseLastOSError() // D6+
RaiseLastWin32Error()
← →
nikkie © (2004-04-01 19:08) [8]>net-функции сами возвращают код ошибки
кроме того, описания кодов ошибок находятся в netmsg.dll. итого:if (result >= NERR_BASE) and (result <= MAX_NERR) then begin
LoadLibraryEx("netmsg.dll", 0, LOAD_LIBRARY_AS_DATAFILE)
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE)
FreeLibrary(...)
end;
← →
AlexeyITN (2004-04-02 10:57) [9]теперь она возвращает:
-----------------------
не удалось найти псевдоним сообщений в сети
-----------------------
название компа указано верно!в чём проблема...?
Набираю...cmd
net helpmsg 2273...пишет что не правильный псевдоним,..или компьютер принимающий сообщение занят...
но я то отсылаю себе!
может прав не хватает!?
(прошу прощения что плавно отошёл от темы"программирование на WINAPI")
← →
BiN © (2004-04-02 11:23) [10]а служба сообщений у тебя запущена?
← →
AlexeyITN (2004-04-02 11:27) [11]да, запущена. Это я с самого начала смотрел!
← →
AlexeyITN (2004-04-02 12:36) [12]самое обидное в этой истории это то, что
winexec(PChar(b),SW_HIDE); работает...и с команды run работает...
-----------------------
функцию гружу очень тупо: статически загружаю библиотеку!
-----------------------
после uses
function NetMessageBufferSend(ServerName: LPCWSTR; MsgName: LPCWSTR; FromName: LPCWSTR; Buf: LPCWSTR;
BufLen: DWORD): DWORD; stdcall; external "netapi32.dll" name "NetMessageBufferSend";
← →
BiN © (2004-04-02 13:27) [13]у тебя очевидно ошибка в параметре MsgName.
Приведи вызов
← →
BiN © (2004-04-02 13:31) [14]так все ясно
WMsgName := "-1-"; замени на имя компьютера-адресата, и к тому же какого он типа, - надеюсь, Widestring, а не String
← →
AlexeyITN (2004-04-02 13:37) [15]var result: integer;
WMsgName : WideString;
WMsg : WideString;
MsgLen : integer;
b:string;
begin
WMsg := PChaR("-1-");
MsgLen := Length(WMsg) * 2; // Unicode is 2-byte.
WMsgName := "-1-"; b:="-1-";
Result := NetMessageBufferSend(nil,
PWideChar(WMsgName), PWideChar(b),
PWideChar(WMsg), MsgLen);
-----------------
имя моего компа: -1-
← →
BiN © (2004-04-02 13:54) [16]&^%^#$*%^$*^%)*&)_(*&)(%&^$ это я ругался :)
b:widestring
и вместо WMsg := PChaR("-1-"); пиши просто WMsg := "-1-";
← →
AlexeyITN (2004-04-02 14:05) [17]позор мне тупорылому....:)
спасибо за помощь!
← →
AlexeyITN (2004-04-02 14:23) [18]ранее этот код работал,..но я полез на microsoft.update...поустанавливал критические обновления для винды.
После этого прога перестала работать - я удалил все эти обновления, но, как оказалось :) дядя Били сделал так, что изменнённая netapi32.dll не восстановилась до прежнего состояния. А в новой версии как оказалось была отключена работа с переменными типа string. Конец истории. :)))
← →
nikkie © (2004-04-02 20:27) [19]>А в новой версии как оказалось была отключена работа с переменными типа string.
вот ведь собаки! э... а что ты собственно имел в виду?
>Конец истории. :)))
да нет, похоже еще не конец... :)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.038 c