18.06.2005, 15:30 | #1 |
Moderator
|
WinAPI::getLastError()
День Добрый!
Хотел разобраться с расшифровкой числа которое возвращает WinAPI::getLastError Нашел: US-312-915-VPC4 WinAPi::getLastError() always returns 0 The problem was that the GetLastError value was set by Windows each time Windows API function was called. So, the reason that the X++ WinAPI::getLastError method wasn't able to pick up the correct error value, was that the kernel calls several Windows API functions between the X++ call to WinAPI::findFirstFile and WinAPI::getLastError, thus the GetLastError value was reset by Windows. This error was corrected - the kernel caches the GetLastError value right after a function call into a DLL and makes the value accessible from X++ via the DLL system class. Corrections needed: dllclass.hpp: Add a method to the classDLL class: int kcLastDLLError(interpret *ip); dllclass.cpp: Add int classDLL::kcLastDLLError(interpret *ip) { return ip->setIntReturnVal(LOCAL_SESSION_PBLK->_lastDLLError); } Add to classDLL::classDLL addMemberFunc(pType(DB_INT),"lastDLLError", QUALIFIER_STATIC | QUALIFIER_PROPERTY, (classStatic)&classDLL::kcLastDLLError); Change xDLLFunc::kcCall to { if (ip->getNumberOfArgs() != _numargs) // illegal number of arguments return ip->CQLRunError(CQL_ERR_FUNCARG2); int ret = CallDLLFunction(_dllfunc, _numargs, _argtypes, _rettype, ip, _dll->dllName(), _name); LOCAL_SESSION_PBLK->_lastDLLError = GetLastError(); return ret; } csesrv.hpp: Add a member to the SesPblk_t struct: public: DWORD _lastDLLError; X++ : WinAPI::getLastError: client server static int getLastError() { return DLL::lastDLLError(); } Вопрос с рашифровкой остался открытым. |
|
19.06.2005, 00:23 | #2 |
Участник
|
ничего не понял.
если это информация для других - то непонятная. если это вопрос... то вопроса в вашем сообщении нет. чего вы хотите то? |
|
20.06.2005, 09:25 | #3 |
Участник
|
Ну это обычная WinApi финкция. Если вы хотите узнать, что означает возращаемое число, то лучше взять заголовочный файл winnt.h от С++ , там есть определения , плюс в Ах-е в макросе WINAPI.Их вообщем то много и приводить их значения тут бессмысленно. А сама функция определяется так:
The GetLastError function returns the calling thread's last-error code value. The last-error code is maintained on a per-thread basis. Multiple threads do not overwrite each other's last-error code. DWORD GetLastError(VOID) Parameters This function has no parameters. Return Values The return value is the calling thread's last-error code value. Functions set this value by calling the SetLastError function. The Return Value section of each reference page notes the conditions under which the function sets the last-error code. |
|
20.06.2005, 09:36 | #4 |
Роман Долгополов (RDOL)
|
1. программно вывести читабельное сообщение: FormatMessage
2. просто посмотреть и понять что за ошибка: VC++ Error Lookup из комплекта студии и поставьте себе MSDN |
|
20.06.2005, 10:03 | #5 |
Moderator
|
Спасибо! То что надо!
|
|