#pragmaonce#ifdefTESTPRODLL_EXPORTS#defineTESTPRODLL2_API__declspec(dllexport)#else#defineTESTPRODLL2_API__declspec(dllimport)#endif//extern "C" 指定以C语言方式调用函数,C语言没有函数重载,所以能保证函数名不变////WINAPI约定调用函数的规则,指参数入栈顺序为_stdcallextern TESTPRODLL2_API int a;//导出变量extern"C" TESTPRODLL2_API int WINAPI Add(int b);//导出函数classTESTPRODLL2_API ADD //导出类{public:int WINAPI Do(int b);};extern"C" TESTPRODLL2_API int WINAPI GetA();//获取全局变量extern"C" TESTPRODLL2_API void WINAPI SetA(int b);//设置全局变量extern"C" TESTPRODLL2_API int WINAPI RunADDDo(int a);//创建ADD对象,通过对外函数访问类
在cpp中实现如下:
#include"stdafx.h"#include"TestAdd.h"int a =1;//全局变量定义需要加类型,而且必须定义intAdd(int b){int c = a + b;return c;}intADD::Do(int b){return a + b;}intGetA()//获取全局变量{return a;}voidSetA(int b)//设置全局变量{
a = b;}intRunADDDo(int a)//创建ADD对象,调用方通过对外函数访问dll的类{
ADD add;return add.Do(a);}
#include"stdafx.h"#include"windows.h"#include"TestAdd.h"#pragmacomment(lib,".\\x64\\Debug\\TestPro.DLL.lib")//注意表示当前目录下需要加‘.\’intmain(){
a =2;int c =Add(3);//5
ADD A;int d = A.Do(4);//6int m =RunADDDo(5);//7return0;