c++ - 如何在 DLL 中声明常量?

标签 c++ dll

我人生中第一次熟悉创建库,现在我遇到了问题。

//lib.h
#ifdef DLL_EXPORT
    #define DECLDIR __declspec(dllexport)
#else
    #define DECLDIR __declspec(dllimport)
#endif
...
extern "C" {
    DECLDIR const double MAX_CALC_DUR = 60;
    DECLDIR int stoi(string input);    // C++11 not available on the Code::Blocks version I'm given to work with
}

应用我从中学到的知识tutorial ,我成功地构建了仅包含 stoi() 的库,并将其链接到其他项目以供使用。现在,我想添加一个常量,如上面的代码所示。但是,我收到以下错误:

external linkage required for symbol 'MAX_CALC_DUR' because of 'dllexport' attribute

研究让我想到了这个 question ,这表明问题可能与 MAX_CALC_DUR 本质上等同于静态有关。但是,我知道标准库中定义了常量,那么在DLL中定义常量的正确方法是什么?

最佳答案

您可以简单地省略DECLDIR。由于 MAX_CALC_DUR 具有内部链接(因为它是 const),因此包含 header 的每个文件都将像平常一样获得自己的私有(private)拷贝,并且一切都会正常工作。

如果可以直接插入客户端代码,则无需从 DLL 中导出某些内容。

关于c++ - 如何在 DLL 中声明常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34505759/

相关文章:

c++ - 我正在尝试调用一个函数。这些愚蠢的编译错误的原因是什么?

php - 调用 PHP 解释器并给它 POST 数据

c# - 在 Delphi 中将 C# 或 C++ DLL 作为 COM 对象导入

c++ - 由于错误代码10093,C++程序无法连接到服务器

c++ - 编写一个简单的函数,其工作方式类似于 "std::cout",但在末尾添加一个换行符

c++ - Mac C++程序播放任意格式.wav数据,类似win32 PlaySound

c++ - 模板类构造函数的特化

.lib 中的 C++ 静态变量未初始化

c# - 由于依赖于其他 SXS-DLL 的 DLL,pinvoke 失败

c# - 在不使用 Interop-DLL 的情况下在 Visual Studio C# 中使用 COM+ 对象