我有一個在兩個項目(桌面應用程序項目和庫項目(dll))之間共享的通用實用程序類。我正在VS2013下工作。如何聲明庫和應用程序之間共享的類
爲了使這個類提供給外部呼叫時,它編譯爲我的圖書館的一部分,我使用宏是這樣的:
#include "global.h"
class MYCLASS_EXPORT UtilityClass {
public:
...
我global.h文件包含以下內容:
#ifdef MYCLASS_LIBRARY
# define MYCLASS_EXPORT __declspec(dllexport)
#else
# define MYCLASS_EXPORT __declspec(dllimport)
#endif
因此,當我在庫中使用該類時,我設置了預處理器宏MYCLASS_LIBRARY,並且鏈接我的庫的應用程序可以使用UtilityClass。當我使用該類作爲我的C++桌面應用程序項目的一部分(它沒有預處理器宏MYCLASS_LIBRARY)時,由於MYCLASS_EXPORT聲明,我從編譯器中得到「不一致的dll連接」錯誤。
那麼,如何聲明我的類,以便既可以在庫項目中也可以在桌面應用程序項目中使用(因此不需要導出該類)?
只是爲了更清楚,我已經找到了一個可行的解決方案如下:
#ifdef MYCLASS_LIBRARY
#include "global.h"
#endif
#ifdef MYCLASS_LIBRARY
class MYCLASS_EXPORT UtilityClass {
#else
class UtilityClass {
#endif
public:
...
現在一切都編譯並運行良好,但似乎並沒有一個很好的辦法......
確保沒有爲多個項目設置鏈接器標記「-DMYCLASS_LIBRARY」。 – AndyG
應用程序項目根本沒有定義它,它只是在庫預處理器宏中定義的 – ABCplus
您是否在cpp定義中定義了任何子類/結構或使用靜態變量? 應用程序編譯中是否包含cpp/class定義? –