在VS中,如果要跨项目使用类或变量,就必须用到dllexport和dllimport,下面分别举例全局变量,函数和类跨项目使用。
 环境准备:使用VS分别新建一个windows应用程序和DLL项目,windows应用程序项目名称为ConsoleApplication1,DLL项目名称为testExtern。
 
 
 在ConsoleApplication1上右键项目属性
 
 附加库目录加上testExtern生成dll和lib所在的目录
 
 附加依赖项加上testExtern.lib名称
全局变量
在同一个项目中,全局变量不需要导出,extern声明一下即可:
 test.cpp中定义:
int a = 100;
 
main.cpp中使用:
extern int a;
int main()
{cout << a << endl;
}
 
输出100;
在textExtern项目中定义全局变量(只有定义了导出宏时才会生成lib文件),则需要将其导出:
int _declspec(dllexport) sssss = 1000000;
 
在ConsoleApplication1中使用sssss这个全局变量时,则需要导入:
extern  int _declspec(dllimport)  sssss;
int main() 
{cout << sssss << endl;return 0;
}
 
函数
一般在声明时导出即可:
_declspec(dllexport) void   myFun();
 
void  myFun()
{std::cout << "myFun()" << std::endl;
} 
在main.cpp中包含声明的头文件,不包含头文件则需要extern并声明导入
int main() 
{myFun();return 0;
}
 
类
在testExtern项目中ExportClass必须在定义时导出,在ConsoleApplication1中使用时必须包含其头文件
class _declspec(dllexport) ExportClass
{
public:void testExportClass();
};
void ExportClass::testExportClass()
{std::cout << "textExportClass()" << std::endl;
}
 
main.cpp中:
#include "C:\Users\Administrator\Documents\Visual Studio 2015\Projects\ConsoleApplication1\testExtern\extern.h"
int main() 
{ExportClass ex;ex.testExportClass();return 0;
}















