从DLL返回错误代码

时间:2012-02-09 12:58:39

标签: c dll error-handling

我有一个带有c接口的dll,其功能将返回错误代码,我还将提供一个返回上一个错误的附加功能。这听起来合情合理吗?任何人都可以指出我可以作为模板使用的任何例子吗?

2 个答案:

答案 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。