win32动态连接库的建立,使用和编译过程

 

编者:李国帅

qq:9611153 微信lgs9611153

时间:20050928

背景原因:

Vc中动态链接库是重要的东西,这篇文章对动态库的建立,使用和编译过程进行可概要整理。

大致过程如下:

所需资源:

Vc,dll

库文件一般指计算机上的一类文件,分两种,一种是静态库,另一种是动态库即DLL(Dynamic Link Library)文件,又叫动态链接库文件。静态库和动态库的区别是:静态库在程序的链接阶段被复制到了程序中;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用。

 

如何建立dll

使用vc6建立一个空白的不带mfc的win32动态连接库,加入三个文件

1、主文件,提供dll函数的代码

//
// This code implements the DLL function.
//***************************************************************
// snd.cpp

#include <windows.h>
#include "snd.h"

void MultiHonk(DWORD iterations)
{
  UINT i;

  for (i=0; i<iterations; i++)
  {
    Beep(200, 50);
    Sleep(1000);
  }
}

2、头文件,提供函数声明

//

// This code demonstrates the interface specification for a DLL.

//***************************************************************

 

// snd.h

 

extern "C"

{

  void MultiHonk(DWORD iterations);

}

 

3、定义文件

def文件告诉库管理器该dll文件将输出哪些函数到使用它的应用程序中

dll不必输出它包含的全部函数

 

; snd.def

 

LIBRARY SND

 

EXPORTS

         MultiHonk

 

 

如何使用dll

加载时链接,当应用程序启动时,系统自动加载dll文件,因为它简单透明,应用程序员不需要在应用程序中设置什么就能使用dll。

 

使用vc6建立一个不带mfc的win32的控制台应用程序

 

添加dll相关文件

1、首先把上面编译生成的dll文件放在应用程序exe所在的目录中,或系统环境变量path中定义的某个地方。

 

2、添加lib文件和sndlt.h文件到工程中

         把生成的lib文件复制到应用程序项目文件所在目录中,或编译器可以找到的系统lib目录中。

         另外,应用程序还要访问DLL头文件(sndlt.h)————描述dll文件,复制到项目文件所在目录,或编译器知道的标准头文件目录中。

         Dll的导出sndlt.h可以是一样的,如果在C++中引用需要加入extern "C"标识。

// sndlt.h

extern "C"

{

  void MultiHonk(DWORD iterations);

}

 

 

建立调用文件

// This code uses the simple DLL to test it in load-time mode.
//***************************************************************
// honker1.cpp


#include <windows.h>
#include <stdlib.h>
#include <iostream.h>

#include "sndlt.h"

VOID main(VOID)
{
  DWORD iterations;
  CHAR iterStr[100];

  cout << "Enter the number of beeps to produce: ";
  cin.getline(iterStr, 100);

  iterations=atoi(iterStr);

  // make the beeps
  MultiHonk(iterations);

}

程序编译过程

s

注意点

DEF文件的作用:

dll依赖库管理器建立应用程序用于链接dll文件的lib文件。为库管理器声明库的名称和dll输出的所有函数的名称。

对于dll文件中的每个被输出的函数,在def文件中的exports语句中创建一个包含函数名的行。

 

dll搜索路径:

应用程序的加载目录,当前目录,winnt system目录,winnt目录,path目录等

 

创建dll头文件,声明和描述dll文件中的所有函数,确保头文件中的所有函数包含在extern "C"语句中。

若采用加载时链接而且没有入口点函数,则可以在应用程序中利用同一头文件。

如采用运行时链接,则需要给应用程序创建一个不同的头文件。

 

两种导出方法:

         1、使用def文件,需要使用export "c",生成dll文件lib,exp等文件,调用时必须使用头文件和lib,dll文件,执行时必须使用dll文件

         2、使用导出函数( __declspec(dllexport)  __declspec(dllimport) ) ,调用时不必需要lib文件和头文件。但需要指定调用的函数接口

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微澜-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值