Как получить ошибку из пользовательской функции, которая вызывает оригинальную функцию?
У вас есть лучшее предложение?
Пользовательская функция TCreateFile
эта функция TCreateFile вызывает оригинальную функцию CreateFile.
void* tCreateFile(const char* pFileName,
unsigned long dwDesiredAccess,
unsigned long dwShareMode,
unsigned long dwCreationDisp,
unsigned long dwFlagsAndAttr) // short version of CreateFile
{
void* hnd = ::CreateFile(pFileName,
dwDesiredAccess,
dwShareMode,
NULL,
dwCreationDisp,
dwFlagsAndAttr,
NULL); // real version of createfile
if(hnd == (void*)-1) ::SetLastError(::GetLastError());
return hnd;
}
Некоторая функция
эта функция проверяет, есть ли ошибка, если нет, запустите код
char* Function()
{
void* hfile = tCreateFile("C:\\Test.txt",
(GENERIC_WRITE | GENERIC_READ),
(FILE_SHARE_READ | FILE_SHARE_WRITE),
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL);
if(hfile != (void*)-1)
{
code....
}
else
{
return GetErrorMessage(::GetLastError());
}
}
Функция GetErrorMessage
если какая-то функция завершается ошибкой, функция GetErrorMessage возвращает строку ошибки
char* GetErrorMessage(unsigned long IsError)
{
switch(IsError)
{
case 2L: // ERROR_FILE_NOT_FOUND
{
return "Warning: file not found!\n\nPlease check if the file exists and try again.";
break;
}
case 32L: // ERROR_FILE_IN_USE
{
return "Warning: file in use!\n\nPlease close all applications that use the file.";
break;
}
.....
.....
.....
default:
{
return "Warning: unknown error!";
break;
}
}
}