【问题标题】:Where to define error code constants in C++在哪里定义 C++ 中的错误代码常量
【发布时间】:2014-04-01 19:26:55
【问题描述】:

我从 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 应用程序是理想的。

【问题讨论】:

    标签: c++ qt dllexport error-code


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      返回:已翻译消息的大小,如果返回 ,则缓冲区中的消息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 1970-01-01
        相关资源
        最近更新 更多