从DLL访问向量

Accessing a vector from a DLL

本文关键字:向量 访问 DLL      更新时间:2023-10-16

正在一个项目中工作,我必须在其中构建库并在主函数中使用该库。库为.dll,它具有7个标题和5个源文件。我宣布了一个向量,并在其中一个源文件中实现了。由于我必须在主程序中访问该向量,因此在该源文件中宣布它为全局,并在该标头文件中为外部。使用我的主要程序,我无法访问矢量,因为它显示了"未解决的外部"。我不知道错误到底是什么,因为它在加载时间链接中非常有效,但是在运行时间链接时会出现错误。请欢迎任何帮助。我的代码是这样

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中设置配置(平台正在工作)作为延迟DLL。

使用宏来区分"构建dll"情况与"构建exe"一个。

dll标头:

// NTFS-STRUCT.h
#ifdef BUILD_DLL
#define DECLSPEC_DLL __declspec( dllexport )
#else
#define DECLSPEC_DLL __declspec( dllimport )
#endif
DECLSPEC_DLL extern std::vector<std::string> files;

DLL实现:

// NTFS-Search.cpp
#define BUILD_DLL
#include "NTFS-STRUCT.h"
std::vector<std::string> files;

exe:

// MFT-List.cpp
#include "NTFS-STRUCT.h"
cout << "Vector size" << files.size();

编辑:如何使用导出函数使用向量:

DECLSPEC_DLL void UpdateVector( std::vector<std::string> & files );

如果您遇到了堆损坏,那可能是因为您没有使用>相同的选项来构建EXE和DLL。选项必须是Multi-threaded DLL (/MD)Multi-threaded Debug DLL (/MDd)Property->C++->Code Generation

中设置这些选项

edit2:如何链接

方法一:在dll标头中使用#pragma指令。

#pragma lib( comment, "mylib.lib" )

方法两个:使用依赖项设置。

  1. 使DLL项目成为解决方案"项目依赖项"中EXE的依赖性
  2. yes设置为exe
  3. Linker->General属性中的Link Library dependencies

方法三:明确添加库文件(lib)

转到Linker->Input属性,然后将LIB文件添加到Additional Dependencies列表中,for Exe