Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

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 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
1-1084309741
studentRSU
2004-05-12 01:09
2004.05.23
Чертов Скринсервер.


4-1081233002
S@shka
2004-04-06 10:30
2004.05.23
Определение загрузки ПК


7-1082015905
Ozone
2004-04-15 11:58
2004.05.23
И снова Web-камера


7-1081934668
infom
2004-04-14 13:24
2004.05.23
Как сменить раскладку клавиатуры на русскую в рантайме


7-1081233438
random
2004-04-06 10:37
2004.05.23
привод CD-Rom