2012-02-09 2 views
2

У меня есть dll с c-интерфейсом, функции которого будут возвращать коды ошибок, я также предоставил дополнительную функцию, которая возвращает последнюю ошибку. Это звучит разумно? может ли кто-нибудь указать мне на любые примеры, которые я могу использовать в качестве шаблона, пожалуйста?Возвращаемые коды ошибок из DLL

+3

Сделать каждую экспортируемую функцию возвратом кода ошибки. –

ответ

3

Я также обеспечит дополнительную функцию, которая возвращает последнюю ошибку

Это повлекло бы за собой имеющий errno -style глобальную переменную, содержащую последнюю ошибку, не так ли? Я бы посоветовал это, так как это затруднит использование библиотеки в многопоточном приложении, если вы не используете локальное хранилище потоков. Тем не менее, если вы хотите это сделать, то хорошим примером может служить стандартная библиотека C с ее переменной errno.

Проще и, IMHO, лучший подход - просто вернуть коды ошибок и при необходимости предоставить некоторые функции, которые работают с вашими кодами ошибок; например, вы можете захотеть иметь mylib_strerror, чтобы преобразовать их в понятные для строки представления строк. Таким образом, использование будет выглядеть

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

Хорошим примером этого стиля является getaddrinfo API, указанный в RFC 3493.

5

«Последняя ошибка» не является очень полезной или надежной концепцией в контексте DLL. Что делать, если DLL используется несколькими процессами или потоками?

+2

Это также можно сделать потокобезопасным с помощью локального хранилища потоков. Тем не менее, я согласен с вами, это не очень элегантно. –

Смежные вопросы