在C ++中定义错误代码常量的位置

时间:2014-04-01 19:26:55

标签: c++ qt dllexport error-code

我从C ++ DLL导出了一个方法,然后从VB.net表单应用程序中调用它。 C ++方法当前没有返回值(void)但我想改进它并返回一个表示一系列错误代码的int。 (如果一切顺利,我计划返回零。)

定义这些错误代码的最佳位置在哪里以及如何?

我应该在CPP文件的顶部执行以下操作:

#define ERR_NEGATIVE_CELL_SIZE 1
#define ERR_INVALID_FILE_PATH 2
etc

VB.net应用程序还将定义这些相同的代码,然后根据代码向用户显示UI消息。

显然我更喜欢在DLL中抛出异常并在VB.net中捕获它(以及相关的异常消息),但这似乎不可能使用extern“C”__declspec(dllexport)方法。

很高兴听到其他设计模式。我还计划通过C ++控制台可执行文件公开DLL方法,因此将错误消息一次存储在DLL中并将它们提供给控制台和UI应用程序是理想的。

2 个答案:

答案 0 :(得分:5)

请尽可能避免使用预处理器。

对于您的场景,定义枚举是合理的。 在函数原型旁边定义它。 要公开翻译,请使用翻译功能并将其导出。 类似的东西:

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

返回:已翻译消息的大小,如果返回< = len

,则返回缓冲区中的消息

答案 1 :(得分:5)

如果您希望错误代码可用于其他编译单元,则最好将它们放在头文件中。通常,在编写库代码时,您将创建一个或多个头文件,这些头文件声明了使用库所需的所有常量,类型,函数和类。然后将实现编译到库中。库的使用者包括您的标题和导入库。

关于常量,您建议使用#define来声明它们。不要这样做。考虑使用常量或枚举。预处理器通常尽可能少地使用。