从DLL返回错误代码
答
我也将提供返回的最后一个错误
这将产生具有errno
式的全局变量保持最后一次错误,正确的附加功能?我建议不要这样做,因为除非使用线程本地存储,否则会使您的库很难用于多线程应用程序。不过,如果你想这样做,那么标准的C库和它的变量/宏将是一个很好的例子。
一个更简单的,恕我直言,更好的方法是只返回错误代码,并在必要时提供一些函数来处理你的错误代码;例如,您可能需要使用mylib_strerror
将它们转换为可读的字符串表示形式。因此,使用看起来像
int err = mylib_operation_that_might_fail();
if (err != 0) {
fprintf("%s\n", mylib_strerror(err));
exit(1);
}
这种风格的一个很好的例子是在RFC 3493指定的getaddrinfo
API。
答
“上一个错误”在DLL上下文中不是一个非常有用或可靠的概念。如果DLL正在被多个进程或线程使用,该怎么办?
+2
这也可以通过使用线程本地存储来使线程安全。不过,我同意你的观点,这不是很优雅。 – 2012-02-09 13:08:47
使您导出的每一个函数都返回一个错误代码。 – 2012-02-09 13:08:31