从DLL返回错误代码

问题描述:

我有一个C接口的DLL,其功能将返回错误代码,我还将提供一个附加功能,返回最后一个错误。这听起来合理吗?任何人都可以指出我可以用作模板的任何示例吗?从DLL返回错误代码

+3

使您导出的每一个函数都返回一个错误代码。 – 2012-02-09 13:08:31

我也将提供返回的最后一个错误

这将产生具有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