上两篇,虽然已经导出了DLL库,也在客户程序中引用了,但注意,这里是同一个人编写DLL和客户端程序.更多的时候,是别人使用你的DLL库,这时候,别人不知道如何使用你DLL库.所以要加一下头文件.提供DLL导出函数原型的声明及函数的有关注释文档.
DLL1.h
_declspec(dllimport) int add(int a, int b);
_declspec(dllimport) int subtract(int a, int b);
这个DLL1.h是给该DLL客户端,即调用该DLL的程序使用的,因此使用的时dllimport
在DllTest中
#include "DLL1.h"
_________________________________________________
改造DLL1.h,使其不仅能够为调用动态链接库的客户端程序服务,同时也能够由动态链接库程序自身来使用.
#ifdef DLL1_API
#else
#define DLL1_API _declspec(dllimport)
//客户程序引用此.h文件时,没有定义DLL1_API,所以被定义成dllimport
#endif
DLL1_API int add(int a, int b);
DLL1_API int subtract(int a, int b);
如果定义了DLL1_API,那么就不再定义了,如果没有定义,
就把DLL1_API定义为_declspec(dllimport)
在DLL1.cpp文件中,
#define DLL1_API _declspec(dllexport) //先被定义成dllexport了.
#include "DLL1.h"
int add(int a, int b)
{
return a + b;
}
int subtract(int a, int b)
{
return a - b;
}
在程序编译时,头文件不参与编译,源文件单独编译.
DLL内的函数和数据,对DLL来说是导出,对客户端程序来说是导入.