qt — Где определить константы кода ошибки в переполнении стека

Я экспортировал метод из C ++ DLL и затем вызвал его из приложения форм VB.net. В настоящее время метод C ++ не имеет возвращаемого значения (void), но я хочу улучшить его и вернуть int, представляющий серию кодов ошибок. (Я планирую вернуть ноль, если все прошло хорошо.)

Где и как лучше всего определить эти коды ошибок?

Должен ли я сделать следующее в верхней части моего файла CPP:

#define ERR_NEGATIVE_CELL_SIZE 1
#define ERR_INVALID_FILE_PATH 2
etc

Приложение VB.net также определит эти же коды и затем покажет пользователю сообщения на основе кода.

Очевидно, что я бы предпочел бросить исключение в DLL и перехватить его (вместе с соответствующим сообщением об исключении) в VB.net, но это не представляется возможным при использовании метода extern «C» __declspec (dllexport).

Рад слышать об альтернативных шаблонах дизайна. Я также планирую представить методы DLL через исполняемый файл консоли C ++, поэтому хранение сообщений об ошибках один раз в DLL и обеспечение их доступности для консоли и приложений пользовательского интерфейса является идеальным.

1

Решение

Если вы хотите, чтобы коды ошибок были доступны для других модулей компиляции, лучше всего их поместить в заголовочный файл. Обычно при написании кода библиотеки вы создаете один или несколько файлов заголовков, которые объявляют все константы, типы, функции и классы, необходимые для использования библиотеки. Реализации затем компилируются в библиотеку. Потребитель библиотеки включает ваши заголовки и библиотеку импорта.

Что касается ваших констант, вы предлагаете использовать #define объявить их. Не делай этого. Подумайте об использовании констант или перечислений. Как правило, препроцессор — это то, что нужно использовать как можно меньше.

5

Другие решения

Пожалуйста, избегайте препроцессора, где это возможно.

Для вашего сценария определение enum будет разумным.
Определите его рядом с прототипом функции.
Для показа переводов используйте функцию перевода и экспортируйте ее тоже.
Что-то вроде:

size_t TranslateError(int error, char* buffer, size_t size)

Возвращает: размер переведенного сообщения, сообщение в буфере при возврате <= длина

5

По вопросам рекламы [email protected]