2013-03-09 25 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

相關問題