DLL入门到深入(3)

来源:互联网 发布:网络爬虫兼职 编辑:程序博客网 时间:2024/05/15 11:32

这篇继前面接着讲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用到我的程序中就行了,我不是技术狂人,嘿嘿~。