从DLL访问向量
Accessing a vector from a DLL
正在一个项目中工作,我必须在其中构建库并在主函数中使用该库。库为.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" )
方法两个:使用依赖项设置。
- 使DLL项目成为解决方案"项目依赖项"中EXE的依赖性
- 将
yes
设置为exe
的
Linker->General
属性中的Link Library dependencies
方法三:明确添加库文件(lib)
转到Linker->Input
属性,然后将LIB文件添加到Additional Dependencies
列表中,for Exe
相关文章:
- 尝试通过多个向量访问变量时,向量下标超出范围
- C++从另一个类访问公共静态向量的正确方法是什么
- 访问存储在向量C++中的结构的多态成员
- 如何从静态向量访问类元素?
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 从父类的向量访问子类函数,而无需向下转换
- 如何使用常数向量访问成员函数
- 如何从C 向量访问单个单词
- 从C++中传递给函数的指针向量访问矩阵
- 多向量访问与本地对象
- C 迭代器与用于向量访问的指针
- 从向量访问成员功能
- 如何在 c++ 中从 "pointer-to-objects" 向量访问对象
- 如何从双精度向量的向量访问数据
- 从指针向量访问成员函数?C++
- 如何使用SWIG Python从内部向量访问c ++对象方法
- 无法从向量访问对象的getter
- 从向量访问某些类函数C++的问题
- 从基类类型的向量访问派生类方法
- 从对象指针向量访问对象