c++ - 何时在 C++ 中使用 __declspec(dllexport)

标签 c++ visual-c++ c++11 dllexport

我正在制作这个 DLL 项目,不包含任何特定于编译器的宏。

导入程序 (.exe) 文件编译干净,在我的 DLL 文件中导入方法后没有生成错误。他们在不同的项目上,但解决方案相同。

我是否因为没有使用任何调用约定而把事情搞砸了?

我的 DLL 文件在命名空间中并以 OOP 方式实现。

但有时或大多数时候,.lib 不会生成,所以我必须将我的 DLL 设置切换为 LIB,然后复制生成的 .lib 文件,然后再次将其转回 DLL 文件。

而且我什至不知道我使用的库是.dll 还是.lib 文件。

有人给我解释清楚吗?

编辑

我将添加一些我真的很困惑何时使用它的情况。

假设我有这些:

namespace
{

    class Base abstract
    {

    public:
        Base()
        {
            //initialize base components
        }
        virtual void func() = 0;

    public:

        //interface
    };

    class Derive : public Base
    {

    public:
        Derive();
        void func() override;

    private:

        //interface

    };

}

我应该在这里使用 declspec(dllexport) 吗:

  • 构造函数(例如Base()Derive())?

  • 虚拟 函数?我会把它放在哪里?在派生中还是在基础中?还是两者兼而有之?

  • > 公共(public)变量? (太可怕了!)

我在其他头文件中看到,他们将 extern 添加到其中。我需要它吗?

这会破坏我所有的代码语法

请回答....

最佳答案

听起来好像您正在链接本应位于 dll 中的库文件。所以你根本没有使用 dll。一切都进入 exe 文件。

Microsoft 要求 dll 中的 __declspec(dllexport) 和 exe 中的 __declspec(dllimport)。它变得复杂,所以有宏来解决它。

CLASS_DECLSPEC

编译器然后挑选出要使用的 __declspec 中的哪一个。

参见:http://msdn.microsoft.com/en-us/library/8fskxacy(v=vs.80).aspx

关于c++ - 何时在 C++ 中使用 __declspec(dllexport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15311577/

相关文章:

c++ - OpenCV 3.0 cvAbsDiff() - 没有用于调用 'cvAbsDiff' 的匹配函数

windows - WaitForSingleObject() vs RegisterWaitForSingleObject()?

visual-c++ - 自定义分配器与 promise 和打包任务

windows - 在 visual studio 2010 中找不到 msbuild.exe

c++ - 通过 std::vector 的迭代似乎只在一个函数中被破坏

c++ - 为什么 std::string 使 WSAGetLastError 返回零?

c++ - 为什么在 C++ 中,Visual Studio 将我的类构造函数描述为具有 "2+ Overloads"?

c++ - 返回与作为参数传递的 lambda 表达式相同的类型

c++ - 可变参数模板中元函数的最大大小

c++ - 在 C++ 中逐行读取 const 数据