我有一個C接口的DLL,其功能將返回錯誤代碼,我還將提供一個附加功能,返回最後一個錯誤。這聽起來合理嗎?任何人都可以指出我可以用作模板的任何示例嗎?從DLL返回錯誤代碼
2
A
回答
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
相關問題
- 1. 錯誤PRJ0019:工具從「正在複製DLL ...」中返回錯誤代碼
- 2. 返回值與返回錯誤代碼?
- 3. AngularJS代碼返回錯誤?
- 4. JS代碼返回錯誤
- 5. 返回錯誤代碼
- 6. drupal_http_request返回錯誤代碼
- 7. 從C#運行代碼錯誤的DLL#
- 8. Hive錯誤:FAILED:執行錯誤,從org.apache.hadoop.hive.ql.exec.DDLTask返回代碼1。 stringTypeInfo
- 9. DLL註冊返回代碼0x80029c4a
- 10. jQuery代碼返回'Object expected'錯誤
- 11. SetFileTime返回錯誤代碼5
- 12. AudioQueueStart有時返回錯誤代碼-50
- 13. 高層API返回錯誤代碼500
- 14. CreateProcessAsUser返回錯誤代碼2
- 15. Python返回「錯誤的」退出代碼
- 16. NSFileHandle fileHandleForWriting返回nil,錯誤代碼24
- 17. WP7 - PhoneGap FileTransfer返回空錯誤代碼
- 18. NetApiBufferFree返回ERROR_INVALID_PARAMETER(錯誤代碼87)
- 19. SHLoadImageFile返回錯誤代碼6
- 20. SDWebImage總是返回錯誤代碼401
- 21. Proguard - Proguard返回錯誤代碼1
- 22. ajax返回錯誤狀態代碼
- 23. t-sql返回錯誤代碼vs RaiseError
- 24. Phonegap FileTransfer錯誤代碼返回null
- 25. CWindowImpl - Create()返回錯誤代碼1406
- 26. sqlite3_prepare_v2返回錯誤1代碼
- 27. Cordova FileTransfer返回空錯誤代碼
- 28. RESTful WCF返回錯誤代碼415?
- 29. fql multiquery返回未知錯誤代碼
- 30. REST API錯誤代碼返回結構
使您導出的每一個函數都返回一個錯誤代碼。 – 2012-02-09 13:08:31