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

visual When to use __declspec(dllexport) in C++

本文关键字:declspec dllexport c++ 何时使      更新时间:2023-10-16

我正在制作这个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)吗:

  • constructors(如Base()Derive()) ?

  • virtual功能?我把它放在哪里?派生式还是基底式?还是两个?

  • 公共变量?(可怕的)

我看到在其他头文件中,他们添加了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