我有一个带有c接口的dll,其功能将返回错误代码,我还将提供一个返回上一个错误的附加功能。这听起来合情合理吗?任何人都可以指出我可以作为模板使用的任何例子吗?
答案 0 :(得分:5)
“最后一个错误”在DLL的上下文中不是一个非常有用或可靠的概念。如果DLL被多个进程或线程使用怎么办?
答案 1 :(得分:3)
我还将提供一个返回上一个错误的附加函数
这需要一个errno
样式的全局变量保存最后一个错误,对吧?我建议不要这样做,因为它会使您的库难以在多线程应用程序中使用,除非您使用线程本地存储。不过,如果你想这样做,那么带有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。