我从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应用程序是理想的。
答案 0 :(得分:5)
请尽可能避免使用预处理器。
对于您的场景,定义枚举是合理的。 在函数原型旁边定义它。 要公开翻译,请使用翻译功能并将其导出。 类似的东西:
size_t TranslateError(int error, char* buffer, size_t size)
返回:已翻译消息的大小,如果返回< = len
,则返回缓冲区中的消息答案 1 :(得分:5)
如果您希望错误代码可用于其他编译单元,则最好将它们放在头文件中。通常,在编写库代码时,您将创建一个或多个头文件,这些头文件声明了使用库所需的所有常量,类型,函数和类。然后将实现编译到库中。库的使用者包括您的标题和导入库。
关于常量,您建议使用#define
来声明它们。不要这样做。考虑使用常量或枚举。预处理器通常尽可能少地使用。