2013-03-09 21 views
3

我在做这个DLL项目,并且不包含任何编译器特定的宏。什么时候在C++中使用__declspec(dllexport)

导入程序(.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。我在这里需要吗?

这会毁了我的所有代码语法

答案请....

+0

我真的很讨厌那些谁只是查看这篇文章,思考这样的:“我不知道这东西” - > [更好地降低投票]没有生活任何评论。只是.... – mr5 2013-03-09 17:04:08

+0

你假设很多,认为downvote的唯一原因是不知道'dllexport'是什么...; - ] – ildjarn 2013-03-10 20:57:38

+0

不,我真的是这样说的,他们只是懒得读所有的细节我在这里说。我只是表达了我想说的话 – mr5 2013-03-11 10:54:40

回答

3

听起来好像你在你的库文件,应该是在DLL链接。所以你根本没有使用dll。一切都进入exe文件。

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

CLASS_DECLSPEC 

然后,编译器会整理出要使用哪一个__declspec's。

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

相关问题