Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WinAPI Return Values and Errors [D7, Win2k]


AlexeyITN ©   (2004-04-01 16:33:00) 

Доброго времени суток.
Уважаемые мастера, прошу меня извинить за слишком глупый вопрос, но но но...
Я думал без "этого" обойдусь, а шиш! Программирование как увлечение застопорилось. Вопрос: как правильно обрабатывать ошибки от винды и выдавать их результат юзеру. Например: есть функция, она возвращает 123 (при нуле - успех). Как эти "123" присобачить к конкретным строкам ошибок. Я не понимаю как использовать набор текстовых сообщений и набор кодовых ошибок возвращаемых, в случае не удачи, функцией. Подскажите. Возможно статьёй, ссылкой...Бьюсь как рыба об лёд...:(
Заранее благодарен!


nikkie   (2004-04-02 20:27:00) [1]

>А в новой версии как оказалось была отключена работа с переменными типа string.
вот ведь собаки! э... а что ты собственно имел в виду?

>Конец истории. :)))
да нет, похоже еще не конец... :)


AlexeyITN   (2004-04-02 14:23:00) [2]

ранее этот код работал,..но я полез на microsoft.update...поустанавливал критические обновления для винды.
После этого прога перестала работать - я удалил все эти обновления, но, как оказалось :) дядя Били сделал так, что изменнённая netapi32.dll не восстановилась до прежнего состояния. А в новой версии как оказалось была отключена работа с переменными типа string. Конец истории. :)))


AlexeyITN   (2004-04-02 14:05:00) [3]

позор мне тупорылому....:)
спасибо за помощь!


BiN   (2004-04-02 13:54:00) [4]

&^%^#$*%^$*^%)*&)_(*&)(%&^$ это я ругался :)

b: widestring
и вместо WMsg := PChaR('-1-'); пиши просто WMsg := '-1-';


AlexeyITN   (2004-04-02 13:37:00) [5]

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:31:00) [6]

так все ясно
 WMsgName := '-1-'; замени на имя компьютера-адресата, и к тому же какого он типа, - надеюсь, Widestring, а не String


BiN   (2004-04-02 13:27:00) [7]

у тебя очевидно ошибка в параметре MsgName.
Приведи вызов


AlexeyITN   (2004-04-02 12:36:00) [8]

самое обидное в этой истории это то, что
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';


AlexeyITN   (2004-04-02 11:27:00) [9]

да, запущена. Это я с самого начала смотрел!


BiN   (2004-04-02 11:23:00) [10]

а служба сообщений у тебя запущена?


AlexeyITN   (2004-04-02 10:57:00) [11]

теперь она возвращает:
-----------------------
не удалось найти псевдоним сообщений в сети
-----------------------
название компа указано верно!в чём проблема...?
Набираю...cmd
net helpmsg 2273...пишет что не правильный псевдоним,..или компьютер принимающий сообщение занят...
но я то отсылаю себе!
может прав не хватает!?
(прошу прощения что плавно отошёл от темы"программирование на WINAPI")


nikkie   (2004-04-01 19:08:00) [12]

>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;


VMcL   (2004-04-01 18:50:00) [13]

>>AlexeyITN  (01.04.04 16:33)

RaiseLastOSError() // D6+
RaiseLastWin32Error()


BiN   (2004-04-01 17:33:00) [14]

net-функции сами возвращают код ошибки, а не getlasterror.
пиши типа   If Result<>0 then
     begin
        ShowMEssage(Result);
     end;


AlexeyITN   (2004-04-01 17:24:00) [15]

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 настолько?


AlexeyITN   (2004-04-01 17:19:00) [16]

да нет, не издеваюсь, ...я просто присваивал результат функции переменной result типа integer, а потом писал SysErrorMessage(result)


BiN   (2004-04-01 17:17:00) [17]

ты чего издеваешься?
так и пиши SysErrorMessage(GetLastError)


AlexeyITN   (2004-04-01 17:12:00) [18]

спасибо! Пара вопросов.
- какая разница будет в написании SysErrorMessage и GetLastErorr, если сразу после функции написать SysErrorMessage ?
- как выводить результат функции при помощи GetLastErorr?


BiN   (2004-04-01 16:39:00) [19]

Бьюсь как рыба об лёд...

sysutils->SysErrorMessage он же FormatMessage из кернел32


Наверх

Титульная страница Поиск, карта сайта Написать письмо