动态链接库编程范例

我们经常在做各种二次开发的时候都会使用卖方提供的

SDK进行开发,往往卖方并不愿理提供给我源程序而是

给我一个提供一系列函数接口说明和一些封装的动态链接

库。

今天我们就要说说静态链接库和动态链接库,静态链接库

往往以lib后缀结尾,然而动态链接库往往以dll后缀结束。

但是我们不能仅仅以后缀名作为它们二者的区别,比如

动态链接库也可能存在lib后缀的文件,然而这种情况下

lib文件只是保存一些函数符号,正则的提供运行代码的

指令部分仍然存在在dll文件中。

其实从本质上来说,动态链接库是我们再运行程序的时候

在进行链接,然而静态链接库的代码指令是直接包含在最终

的应用程序中,所以我们有使用的动态链接库在生成最终

的程序里,如果一旦将该动态链接库文件删除,程序将提示

确实xxx.dll文件。然而使用静态链接库生成的最终程序里,

我们直接删除静态链接库文件,程序仍然将正常执行。因为

在生成程序的过程中,静态链接库中的代码指令已经完全的

嵌入到了应用程序中了。windows提供的大多数服务都是以

dll形式提供的。

然而静态链接库虽然可移植性强,但是会造成程序很庞大,所以

往往大多数开发接口都是以动态链接库的形式提供的。

下面将展示一个简单的动态链接库的范例:
1.打开vc++6.0新建一个动态链接库工程,取名为Dlldemo:

2创建一个空的DLL工程:

3.我们添加一个头文件为AddDll.h 一个源文件为AddDll.cpp

  在本范例中我们将要把下面这个函数封装为动态链接库提供给第三方开发:

int Add(int a,int b)
{
    return a+b;
}

4.我们在头文件里添加需要导出的函数的声明:

1 extern "C" _declspec(dllexport) int Add(int a,int b);

5.然后在源文件里面实现这个导出函数:

1 #include "AddDll.h"
2
3 int Add(int a,int b)
4 {
5     return a+b;
6 }

6.编译工程,此时便在工程目录下生成了我们需要的dll文件,如下图所示:

其中AddDll.h提供动态链接库导出函数的声明,Dlldemo.dll文件提供了实际导出函数

的实现代码,不过不再是源代码的形式。Dlldemo.lib提供了导出函数的一些符号列表。

至此动态链接库便成功生成了。

下面我们用一个例子测试:

1.新建一个测试工程为test,在工程中添加一个test.cpp用于测试

2.将上面的三个文件拷贝到test工程目录

3.将Dlldemo.lib用以下两种方式中的一种链接到程序:

    一.通过工程-设置-链接-对象/库模块中 添加Dlldemo.lib

    二.或者在程序通过#pragma comment(lib,"Dlldemo.lib")

4.在test.cpp包含头文件AddDll.h,同时用以下测试代码:

 1 #include "AddDll.h"
 2 #include <iostream>
 3 using namespace std;
 4 #pragma comment(lib,"Dlldemo.lib")
 5 int main()
 6 {
 7     int num1,num2;
 8     cout<<"Please input the two number:"<<endl;
 9     cin>>num1;
10     cin>>num2;
11     int AddResult;
12     AddResult=Add(num1,num2);
13     cout<<"The Add Result is: "<<AddResult<<endl;
14     return 0;
15 }

运行结果:

测试成功咯,不错不错!!!

时间: 2024-10-11 16:59:26

动态链接库编程范例的相关文章

(转载)DLL动态链接库编程入门之二:非MFC DLL

上一节中讲解的是DLL概论及其调试和查看,本节将为大家详解非MFC DLL的相关内容.  1.一个简单的DLL 上一节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数. 如图1,在VC++中new一个Win32 Dynamic-Link Library工程dllTest.注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是后面要讲述的MFC动态链接库. 图1 建立一个非MFC DLL 在

Windows 动态链接库编程

1.介绍 Windows操作系统是应用最关的操作系统,因此动态链接库也为程序员所熟悉,即使对于普通的使用者来说,很多时候也会碰到.dll结尾的文件,这就是动态链接库文件.Windows下的动态链接库可以通过参考头文件和.lib库文件进行编译,从而使得动态链接库隐式地被使用:也可以使用LoadLibrary.GetProcAddress等函数来显式调用动态链接库. 2.语法.导入导出 在Windows编程中,对于要使用或被使用的函数或者变量,需要使用 __declspec 关键字来声明,以告诉编译

(转载)DLL动态链接库编程入门之三:MFC规则DLL(上)

上一节中讲解了非MFC DLL,本节将介绍如何创建MFC规则DLL及使用MFC规则DLL的方法. 一.MFC规则DLL概述 MFC规则DLL的概念体现在两方面: (1)它是MFC的 "是MFC的"意味着可以在这种DLL的内部使用MFC: (2)它是规则的 "是规则的"意味着它不同于MFC扩展DLL,在MFC规则DLL的内部虽然可以使用MFC,但是其与应用程序的接口不能是MFC.而MFC扩展DLL与应用程序的接口可以是MFC,可以从MFC扩展DLL中导出一个MFC类的

(转载)DLL动态链接库编程入门之五:MFC扩展DLL

MFC扩展DLL的内涵为MFC的扩展,用户使用MFC扩展DLL就像使用MFC本身的DLL一样.除了可以在MFC扩展DLL的内部使用MFC以外,MFC扩展DLL与应用程序的接口部分也可以是MFC.我们一般使用MFC扩展DLL来包含一些MFC的增强功能,譬如扩展MFC的CStatic.CButton等类使之具备更强大的能力. 使用Visual C++向导生产MFC扩展DLL时,MFC向导会自动增加DLL的入口函数DllMain: C++代码 extern "C" int APIENTRY

VC++网络安全编程范例(11)-SSL高级加密网络通信(转)

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层对网络连接进行加密. SSL (Secure Socket Layer) 为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听.目前一般通用之规格为40 bit之安全标准,美国则已

动态链接库编程:非MFC DLL

设计一个DLL,内含一个函数计算a+b: DLL的组成 .h(头文件) 定义了DLL能够导出的函数.数据结构或类的声明,该文件的声明内容在.CPP文件中实现,而.CPP的源程序被封装到DLL文件中 .LIB(导入库文件) 导入库文件包含调用DLL的隐式链接信息,当应用程序以隐含形式调用DLL时,导入库文件中的信息被复制到应用程序的代码中 .DLL(实际代码文件) 实际的可执行代码,包含函数的代码和一张表,表中包含函数名和地址

[转载]python socket编程范例

UDP通讯. Server: import socket port=8081 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #从指定的端口,从任何发送者,接收UDP数据 s.bind(('',port)) print('正在等待接入...') while True: #接收一个数据 data,addr=s.recvfrom(1024) print 'Received:',data,'from',addr Client: import sock

【网络】Windows 下 socket 编程范例

1 #include "winsock2.h" 2 #include <stdint.h> 3 #include <stdio.h> 4 5 #include <ctype.h> 6 #include <time.h> 7 8 #define MAX_BUF_LEN 1024 9 10 #define ERR (-1) 11 #define OK 0 12 13 enum { 14 TCP = 6, 15 UDP = 17, 16 };

Delphi 动态链接库编程

樊伟胜 原文地址:https://www.cnblogs.com/fanweisheng/p/11378767.html