编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 创建动态链接库
  · 创建动态链接库

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  108 篇
技术分:  1156 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 15:43:13
          楼主

创建动态链接库
Visual C++的工程窗口中提供了创建动态链接库的选项,用户可以选择该选项来创建一个动态链接库工程。具体步骤如下:
(1)单击“File/New”菜单项,打开“New”窗口,选择“Projects”选项卡,如图1所示。
 
图1  新建工程窗口
(2)在列表中选择“Win32 Dynamic Link Library”选项,表示创建动态链接库工程,在“Project name”编辑框中输入工程名称。单击“OK”按钮进入向导窗口,如图2所示。
 
图2  Dll向导窗口
(3)在向导窗口中选择“A simple DLL project”选项,单击“Finish”按钮完成工程的创建。
(4)向工程中添加一个头文件,名称为“ShowDlg.h”。
(5)在头文件ShowDlg.h中定义动态链接库的导出函数。
#include "stdafx.h"
#define EXPORT __declspec(dllexport)     //定义一个宏
extern "C"  EXPORT  void   ShowDialog(char* pText);  //定义导出函数
 说明:为了将动态链接库中的函数导出,在导出函数前,需要使用__declspec(dllexport)关键字。extern “C”用于防止C++编译器对函数名进行命名改编。由于C++语言支持函数重载,因此C++编译器在编译动态链接库时,会对导出函数进行命名改编。使用extern “C”有许多限制,例如,当函数的调用约定改变时,依然会发生命名改编的情况,稍后将会介绍该情况,并介绍其解决方法。
(6)在动态库的源文件中定义ShowDialog函数。
void  ShowDialog(char* pText)
{
 MessageBox(NULL,pText,"提示",0);
}
(7)运行程序,将生成一个动态链接库文件,扩展名为“.dll”。使用“Depends”工具打开生成的动态链接库,如图3所示。
 
图3  查看动态链接库
如果修改动态链接库中的ShowDialog方法,改变其默认的调用约定,例如使用__stdcall调用约定,动态库中的函数将发生命名改变。修改ShowDlg.h头文件中的函数声明。
#include "stdafx.h"
#define EXPORT __declspec(dllexport)       //定义宏
extern "C"  EXPORT  void __stdcall  ShowDialog(char* pText);  //改变函数的调用约定
修改动态链接库源文件中的函数定义。
void __stdcall ShowDialog(char* pText)       //改变函数调用约定
{
 MessageBox(NULL,pText,"提示",0);       //弹出提示信息
}
重新编译/运行程序,查看动态链接库中的函数信息,发现函数名不再是ShowDialog,如图4所示。
 
图4  观察动态链接库
由于__stdcall是一种比较流行的函数调用约定,为了防止发生函数命名改编的情况,可以定义一个.def文件,其中加入EXPORTS节,设置导出函数名,如图5所示。
 
图5  设置DEF文件
将设置的.def文件添加到动态链接库工程中,重新运行应用程序,发现函数没有发生命名改编,如图3所示。

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页