动态链接库的创建

fangyukuan

2010.6.20

编写DLL时的函数与一般的函数方法基本一样。但要对库中的函数进行必要的声明,以说明哪些函数是可以导出的,哪些函数是不可以导出的。

把DLL中的函数声明为导出函数的方法有两种:

一是使用关键字_declspec(dllexport)来声明。

二是在.def文件中声明。

一、使用关键字_declspec(dllexport)来声明导出函数

声明函数SayHello为导出函数语句为:int _declspec(dllexport)  SayHello ();

为了使一个用C++语言编写的DLL函数可以在C语言编写的应用程序中使用,在关键字_declspec(dllexport)  之前要附加另一个关键字:extern “C”,以通知编译器采用C链接方式。

例子:(用vs2008写的例子)

新建一个工程。

选择Win32 Project,工程名字为1_DLLDemo。确定。

选择DLL其它默认。

在文件1_DLLDemo.cpp编写代码如下:

extern "C" __declspec(dllexport) void SayHello()

{

::MessageBoxW(NULL, L"Hello", L"fangyukuan", MB_OK);

}

按F7编译即可。

再新建一个测试工程。这里简单一点,新建一个控制台工程就可以了。

选择Win32 console Application,其它全部默认。

编写如下代码:

#include "stdafx.h"

#include "stdlib.h"      // for system("pause");

#include "windows.h"

#include <iostream>

using namespace std;

typedef void (SAYHELLO)();  // 定义一个这种类型的函数指针

int _tmain(int argc, _TCHAR* argv[])

{

HINSTANCE hDllInst;

// 这里为dll的路径,因为现在exe和dll在同一个目录下,所以只写名字即可

hDllInst=LoadLibrary(L"1_DLLDemo.dll");

if(NULL == hDllInst)

{

cout << "加载dll失败" << endl;

}

else

{

SAYHELLO * lpproc =(SAYHELLO *)GetProcAddress(hDllInst,"SayHello");

if(NULL != lpproc)

(*lpproc)();

FreeLibrary(hDllInst);

}

system("pause");

return 0;

}

按F7编译。再按F5运行。结果如下。

二、使用def文件声明导出函数

def文件又叫做模块定义文件,这是一个用于描述DLL属性的文本文件,每个def文件一般要包括以下模块定义语句:

A)       LIBRARY语句,指出DLL的名字,链接器将把这个名字放到DLL库中。

B)       EXPORTS语句,列出库中导出函数的名称及导出函数的序号(可选)。

C)       DISCRIPION语句,该语句用来描述DLL的用途等说明。

可以在def文件分号“;”后面书写注释语句。

在创建DLL时,编译链接器将要使用def文件创建两个文件:一个导出文件(.EXP)和一个导入库文件(.LIB),然后使用导出文件再创建DLL文件。

外部应用程序使用的文件是导入库文件和DLL文件。由于在导入库文件中存放了外部应用程序可导入的DLL导出函数名称列表,因此外部应用程序需要把它连接在应用程序中,才能以它为索引到DLL中去找到要调用的导出函数。也就是说,导入库文件相当于是DLL可提供的服务项目表。

例子:(用vs2008写的例子)

方法同上面一样新建一个DLL工程。

在文件2_DLLDemo.cpp编写代码如下:

void SayHello()

{

::MessageBoxW(NULL, L"2_DLLDemo::Hello", L"fangyukuan", MB_OK);

}

然后再新建一个def文件。

在工程右键->add->New Item…

在def文件编写如下代码:

LIBRARY    "2_DLLDemo"

EXPORTS

SayHello

按F7编译完成。

测试方法同上面例子一样。

本文地址:http://www.cnblogs.com/fangyukuan/archive/2010/06/20/1761464.html

动态链接库的创建

时间: 2024-10-29 04:20:48

动态链接库的创建的相关文章

LINUX系统中动态链接库的创建与使用{补充}

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

LINUX系统中动态链接库的创建与使用

大家都知道,在WINDOWS系统中有很多的动态链接库(以.DLL为后缀的文件,DLL即Dynamic Link Library).这种动态链接库,和静态函数库不同,它里面的函数并不是执行程序本身的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性,得到越来越多程序员和用户的青睐.那么,在LINUX系统中有无这样的函数库呢? 答案是肯定的,LINUX的动态链接库不仅有,而且为数不少.在/lib目录下,就有许多以.so作后缀的文件,这

QT5 动态链接库的创建和使用

记录一下QT5 动态链接库的创建和使用 在文章的最后有完毕的代码供下载 1.创建动态链接库 先新建一个库项目 选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld 再点击下一步到 假设这里我们须要QtGui所以也勾选上了 再点击下一步直到完毕 我们在.pro文件中加上 DESTDIR =..\MyDebug 它的意思是我们把生成的内容放到这个目录里,假设没有它会自己主动生成 点击项目把Shadow build 去掉勾选 设置完毕后我们来实现方法測试 把sld.h改动成这样

QT5 动态链接库的创建和使用(QT自己做动态库给自己使用)

记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1.创建动态链接库 先新建一个库项目 选择chose进入下一下页面,类型选择共享库,输入一个名称:我输入的是sld 再点击下一步到 如果这里我们需要QtGui所以也勾选上了 再点击下一步直到完成 我们在.pro文件里加上 DESTDIR =..\MyDebug 它的意思是我们把生成的内容放到这个文件夹里,如果没有它会自动生成 点击项目把Shadow build 去掉勾选 设置完成后我们来实现方法测试 把sld.h修改成这样

C/C++中动态链接库的创建和调用

DLL 有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.下面为你介绍C/C++中动态链接库的创建和调用. 动态连接库的创建步骤: 创建Dll有两种方式. 一.创建Non-MFC DLL动态链接库 1.打开File —> New —> Project选项,选择Win32 Dynamic-Link Library —>sample project —>工程名:DllDemo 2.新建一个.h文件DllDe

windows下动态链接库的创建和使用

动态链接库:顾名思义,程序运行时动态加载的库.将程序中的某些模块用动态链接库的方式发布,可以有效的减少可执行文件(.exe)的容量,实现模块与程序的分离.使用动态链接库时最重要的是 .h头文件 .lib引入库文件 .dll文件:.h文件包括类或者变量的申明,.lib文件包括包括该dll导出的变量或者函数的符号名,dll文件包含该DLL实际的函数和数据. 在使用动态库的情况下,在编译连接和执行文件时,只需要连接该DLL的引入库文件,该DLL中的函数代码和数据并不复制到可执行文件中,直到可执行程序运

VS2019 C++动态链接库的创建使用

静态库:函数和数据被编译进一个二进制文件,通常扩展名为.lib,在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件. 动态库:往往提供2个文件,一个是引入库和一个DLL,引入库包含被DLL导出的函数和变量的符号名,DLL包含实际的函数和数据.在编译链接可执行文件时,只需要链接引入库,DLL中的函数代码和数据并不复制到可执行文件中,在运行的时候,再去加载DLL,访问DLL中导出的函数. 使用DLL的好处:1.可以采用

DLL动态链接库的创建与使用

? 动态链接库英文为DLL,是Dynamic Link Library的缩写.DLL是一个包含可由多个程序,同时使用的代码和数据的库 --------------百度百科 ? 下面我们使用vs2010创建一个可供win32程序使用的dll ? 打开vs2010,点击新建项目 ? 新建一个win32项目 ? ? 点击下一步 ? 新建一个空的dll项目 右键源文件,添加,新建项 ? 新建一个c文件 同样的在头文件里新建一个h文件 然后就可以开始写代码了 每一个dll都有一个入口函数,这个入口函数叫做

Qt动态链接库的创建和使用

一.生成dll文件 1.创建一个C++库项目. 新建->Library->C++库,然后点击"choose": 位置->类型,选择共享库: 模块的勾选看情况. 最后,工程中有3个文件.mylib.cpp.mylib.h.mylib_global.h. 2.添加内容,即库文件要实现的功能. 例:1.创建一个ui文件 2.修该mylib.cpp.mylib.h文件 1 #include "mylib_global.h" 2 #include <Q