孙鑫VC++视频教学19笔记之动态链接库创建

背景

          由于项目需要用到delphi写的客户端来调用dll,并通过dll与Qt写的项目进行socket通信。dll使用C++来写的,这也让我有压力再去回顾一下孙鑫老师的VC++教学视频。主要看的19课的动态链接库

静态链接库

http://blog.csdn.net/ziren235/article/details/1381916

静态链接库是以lib作为后缀的

动态链接库

动态链接库一般都会提供两个文件,.lib.dll文件,而这里的.lib文件是引入库

导出接口

VS2010建立一个win32下的空的dll项目,在项目中编写如下代码(该项目中不包含头文件.h):


              1

然后通过VS2010自带的工具在命令提示符中查看dll中的函数,自带工具在C:\Program Files\Microsoft Visual Studio 10.0\VC\bin中,名字是dumpbin.exe,输入命令后显示如下:

_declspec(dllexport)

可以看出没有任何接口导出,因为在dll项目编写中没有增加导出接口标识宏_declspec(dllexport),在dll项目中add或sub之前增加这个宏后再对其编译后,再对dll进行接口导出,如图:

extern "C"

导出的符号不止函数符号是由于c++中函数可以进行重载,所以编译器会自动为你加上参数来实现重载功能,但如果你想要此时编写的动态链接库在c语言中也可以运用,那么你可以在接口标识宏前再增加一条语句extern "C";增加之后对编译后的dll进行导出,如图:

在微软编译其中,一般函数参数入栈的方式都是_stdcall,但在delphi中都是以_pascal方式入栈的,所以你如果要用delphi来调用win32下写的动态链接库,你需要用到模块定义文件来导出接口。

def文件

你要在工程的当前目录下新建一个文本文件,然后改成后缀为def的模块文件,然后在属性》链接器》输入的模块定义文件中增加你添加的def文件名,如图

此时项目中的代码如图1所示(也可以是最新的代码),模块中的代码如下图:

代码中我把导出符号都改成了大写,在命令提示符中的导出图如下:

备注:如果加入.h头文件,并且def中的导出名字与头文件中申明的接口一样,如果在def的导出名字后面加关键字private,则表示生成的dll无法用导入lib的方式加载。

具体详细的过程可以看孙鑫老师的视频,地址:

http://v.youku.com/v_show/id_XMjYzNDI3NzI=.html

 

附录:dumpbin的命令

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值