2010-05-04 101 views
0

我使用VS2005創建了一個靜態Qt庫。創建自定義QT庫

它創建了一個額外的文件「test_global.h」,除了預期的(test.h和test.cpp)之外。

test_global.h

#ifndef TEST_GLOBAL_H 
#define TEST_GLOBAL_H 

#include <Qt/qglobal.h> 

#ifdef TEST_LIB 
# define TEST_EXPORT Q_DECL_EXPORT 
#else 
# define TEST_EXPORT Q_DECL_IMPORT 
#endif 

#endif // TEST_GLOBAL_H 

爲什麼會產生這個文件,我怎麼想使用它呢?

謝謝。

回答

3

你你的類(或方法)的出口在庫頭:

class TEST_EXPORT TestClass { 
    // ... 
}; 

然後在您的圖書館親文件添加:

期間的dll編譯您的類頭
DEFINES += TEST_LIB 

所以將有「Q_DECL_EXPORT」宏,這是Qt的方式告訴鏈接器「導出此類/方法」,並且當您在某些應用程序中使用您的DLL時,頭將具有「Q_DECL_IMPORT」宏。

欲瞭解更多信息,請檢查Qt documentation

+0

1-)我是否需要將「TEST_EXPORT」放在每個符號的前面,還是存在範圍? 2-)我是否需要將「TEST_EXPORT」放在未被客戶端使用的類前面? – metdos 2010-05-04 07:46:52

+0

Ad.1。如果要導出類中的每個符號,請將TEST_EXPORT放在類名前面。如果只想導出一些符號,請不要將TEST_EXPORT放在類的前面,而應將TEST_EXPORT放置在每個導出的符號的前面。 Ad.2。沒有。 – chalup 2010-05-04 08:33:53