gpt4 book ai didi

c++ - 如何从调用原始函数的自定义函数中获取错误?你有更好的建议吗?

转载 作者:行者123 更新时间:2023-12-03 09:00:00 25 4
gpt4 key购买 nike

如何从调用原始函数的自定义函数中获取错误?
您有更好的建议吗?

自定义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;
}
}
}

最佳答案

我假设void *是因为您不知道原始函数将返回哪种类型的错误响应。

但是,无效指针的类型也不安全,您也不能dynamic_cast <> void *。看起来可能会导致某些内存损坏。

最好的选择是创建一个局部特化的Error包装器类,并在那里实现不同的返回类型,然后从您的方法中返回此Error包装器。

关于c++ - 如何从调用原始函数的自定义函数中获取错误?你有更好的建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9283053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com