C 从DLL返回错误代码

C 从DLL返回错误代码,c,dll,error-handling,C,Dll,Error Handling,我有一个带有c接口的dll,其中的函数将返回错误代码,我还将提供一个额外的函数来返回最后一个错误。这听起来合理吗?有人能给我举一些我可以用作模板的例子吗?在DLL的上下文中,“最后一个错误”不是一个非常有用或可靠的概念。如果DLL被多个进程或线程使用,该怎么办 我还将提供一个返回最后一个错误的附加函数 这需要一个errno样式的全局变量来保存最后一个错误,对吗?我建议不要这样做,因为这会使您的库难以在多线程应用程序中使用,除非您使用线程本地存储。不过,如果您想这样做,那么带有errnovaria

我有一个带有c接口的dll,其中的函数将返回错误代码,我还将提供一个额外的函数来返回最后一个错误。这听起来合理吗?有人能给我举一些我可以用作模板的例子吗?

在DLL的上下文中,“最后一个错误”不是一个非常有用或可靠的概念。如果DLL被多个进程或线程使用,该怎么办

我还将提供一个返回最后一个错误的附加函数

这需要一个
errno
样式的全局变量来保存最后一个错误,对吗?我建议不要这样做,因为这会使您的库难以在多线程应用程序中使用,除非您使用线程本地存储。不过,如果您想这样做,那么带有
errno
variable/macro的标准C库就是一个很好的例子

一种更简单、更好的方法是只返回错误代码,必要时提供一些操作错误代码的函数;e、 例如,您可能需要一个
mylib_strerror
来将它们转换为人类可读的字符串表示形式。所以,用法看起来像

int err = mylib_operation_that_might_fail();
if (err != 0) {
    fprintf("%s\n", mylib_strerror(err));
    exit(1);
}

此样式的一个很好的示例是中指定的
getaddrinfo
API。

使导出的每个函数都返回错误代码。这也可以通过使用线程本地存储来实现线程安全。不过,我同意你的看法,它不是很优雅。