2012-02-09 243 views
2

我有一個C接口的DLL,其功能將返回錯誤代碼,我還將提供一個附加功能,返回最後一個錯誤。這聽起來合理嗎?任何人都可以指出我可以用作模板的任何示例嗎?從DLL返回錯誤代碼

+3

使您導出的每一個函數都返回一個錯誤代碼。 – 2012-02-09 13:08:31

回答

3

我也將提供返回的最後一個錯誤

這將產生具有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。

5

「上一個錯誤」在DLL上下文中不是一個非常有用或可靠的概念。如果DLL正在被多個進程或線程使用,該怎麼辦?

+2

這也可以通過使用線程本地存儲來使線程安全。不過,我同意你的觀點,這不是很優雅。 – 2012-02-09 13:08:47