这篇继前面接着讲dll导出类。
在讲之前,还是看下MSDN http://msdn.microsoft.com/zh-cn/library/d91k01sh(VS.80).aspx中关于.def文件的说明,其中有这样一句话:如果不使用 __declspec(dllexport) 关键字导出 DLL 的函数,则 DLL 需要 .def 文件。
回想一下前面《DLL入门到深入(1)》 中我包含了一个.def文件,事实上并不需要这个文件,可是编译不通过,我也不知道为什么。这个问题等等再说,先看代码:
1 .cpp如下:
#ifndef DLL_03_H_
#define DLL_03_H_
#ifdef DLL_DOG
#define DECLDIR _declspec(dllexport)
#else
#define DECLDIR _declspec(dllimport)
#endif
extern "C"
{
class DECLDIR Dog
{
private:
char name[10];
public:
Dog(char *na);
void Speak();
};
}
#endif
2 .h如下:
#include <iostream>
#ifndef DLL_DOG
#define DLL_DOG
#include "dll_03.h"
Dog::Dog(char *na)
{
strcpy_s(name,10,na);
}
void Dog::Speak()
{
std::cout<<"Wang...Wang...I'm "<<name<<std::endl;
}
#endif
3 接着添加dll_03.def文件,不过这个文件什么都不写,因为没有它不能通过编译。
4 Test.cpp如下:
#include <Windows.h>
#pragma comment(lib,"dll_03.lib")
#include "dll_03.h"
#include <iostream>
using namespace std;
int main()
{
Dog d("xiao hei");
d.Speak();
return 0;
}
我们会发现.def文件完全是个摆设,在(1)中也可以置空,不过.def文件还是有作用的,好像是设置函数在内存中的表现形式,不过本人是菜鸟,那些细节问题这里不追究。我只要能将DLL用到我的程序中就行了,我不是技术狂人,嘿嘿~。