Возвращение кодов ошибок из DLL - PullRequest
2 голосов
/ 09 февраля 2012

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

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

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

3 голосов
/ 09 февраля 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...