我在一個項目中工作,我必須建立一個庫並在主函數中使用該庫。庫是.dll,它有7個頭文件和5個源文件。在我聲明的頭文件一個矢量和我在其中一個源文件中實現。因爲我必須在我的主程序中訪問這個矢量,所以我在該源文件中聲明瞭它的全局屬性,並在該頭文件中聲明瞭該屬性的全局屬性。現在,我構建了我的Dll並將其與我的主程序我無法訪問該矢量,因爲它顯示「無法解析的外部」。我不知道究竟是什麼錯誤,因爲它完美的加載時鏈接,但在運行時鏈接獲得錯誤。請任何幫助welcome.My代碼是這樣的從一個DLL訪問一個向量
NTFS-STRUCT.h ---- > Library Header
_cdecl(dllexports) extern std::vector<std::string>files;
NTFS-Search.cpp ------ > Library Source file
#include "NTFS-STRUCT.h"
vector<string>files; ---> Global Vector for accessing in Main program
MFT-List --- > Main program
#include "NTFS-STRUCT.h"
cout << "Vector size" << files.size();
P.S因爲我用Dll鏈接主程序也必須運行時鏈接我設置在VS2010(我工作的平臺)配置爲Delay Dll。
當MFT-LIST.cpp讀取NTFS-STRUCT.h時,它必須看到dllimport,而不是dllexport。使用宏來區分「build dll」與「build exe」之間的區別。 – manuell
@manuell我在頭上試了這樣的東西。#ifdef來NTFS_STRUCT 的#define NTFS_STRUCT的extern 「C」 __declspec(dllexport)的 的#else 的#define NTFS_STRUCT的extern 「C」 __declspec(dllimport的) #ENDIF請通過specyfing我有我的,包括NTFS-Search.cpp幫我(Source)和MFT-LIST.cpp(主程序) – WarriorPrince
請注意,在EXE和DLL之間共享全局變量不是最好的事情。你可以有一個DLL導出函數,它引用一個矢量並在被調用時更新它。 – manuell