VC++动态链接库编程之DLL典型实例
Posted on 八月 16rd, 2007 由 admin
热门问答:
推荐阅读
| · 在手机上“看”奥运的前提条件 |
| 摘要:2004年雅典奥运会将在本周拉开帷幕,这一全球最为瞩目的盛事,吸引着人们的眼球。想时刻了解赛场情况,除了观看电视直播之外,也许很多人没想到的是,手机也是第一时间了解奥运资讯的途径之一。通过手机看奥运,主要有三种途径:一是短信,二是手机上网,第三就是在手机上直接看电视。手机短信:最便捷的第一手资讯 要第一时间了解奥运赛事,对手机用户而言,最便捷的途径就是手机短信了。在汽车上、在...... |
| · 再掀液晶风暴,lg显“势气” |
| 摘要: 液晶显示器降价正成为当前的市场热点,日前,显示器巨头lg也开始加入降价促销行列,拉开主流品牌促销战的序幕。记者得到消息,lg将从2月1日开始,举行主题为“复真视界,百万好礼——lg显‘势气’”的大规模春季促销行动。 液晶显示器降价正成为当前的市场热点,日前,显示器巨头也开始加入降价促销行列,拉开主流品牌促销战的序幕。记者得到消息,lg将从2月1日开始,举行主题为“复真视界,百万好礼——lg显‘势气’”的大规模春季...... |
正文
动态链接库dll实现了库的共享,体现了代码重用的思想。我们可以把广泛的、具有共性的、能够多次被利用的函数和类定义在库中。这样,在再次使用这些函数和类的时候,就不再需要重新添加与这些函数和类相关的代码。具有共性的问题大致有哪些呢?笔者归纳如下:
(1)通用的算法
图像处理、视频音频解码、压缩与解压缩、加密与解密通常采用某些特定的算法,这些算法较固定且在这类程序中往往经常被使用。
(2)纯资源dll
我们可以从dll中获取资源,对于一个支持多种语言的应用程序而言,我们可以判断操作系统的语言,并自动为应用程序加载与os对应的语言。这是多语言支持应用程序的一般做法。
(3)通信控制dll
串口、网口的通信控制函数如果由dll提供则可以使应用程序轻松不少。在工业控制、modem程序甚至socket通信中,经常使用通信控制dll。
本节将给出dll的三个典型应用实例。
7.1 算法dll
我们直接用读者的一个提问作为例子。
宋宝华先生,您好!
我在dev.yesky.com上看到你连载的《vc++动态链接库编程》,觉得非常好。我以前主要是用delphi的,c/c++学过,对win32和vcl比较熟悉,但是没有接触过vc++,对mfc很陌生。这段时间和一个同学合作做光学成像的计算机模拟,用到傅立叶变换,手里面有例程是vc++写的。我们的界面是用delphi开发,需要将其傅立叶变换功能提出做一个dll供delphi调用。苦于不懂mfc,试了很多方法,都不成功,最后只得采用折衷方案,简单修改一下程序,传一个参数进去,当作exe来调用,才没有耽搁后续进程。
……
谢谢!
致
礼!
某某
学习过较高级别数学(概率统计与随机过程)、信号与线性系统及数字信号处理的读者应该知道,傅立叶变换是一种在信号分析中常用的算法,用于时域和频域的相互转换。fft变换算法通用而有共性,我们适宜把它集成在一个dll中。
随后,这位读者提供了这样的一个函数:
既然有了fft这个函数,我们要把它做在dll中,作为dll的一个接口将是十分简单的,其步骤如下:
(1)利用mfc向导建立一个非mfc dll;
(2)在工程中添加fft.h和fft.cpp两个文件;
fft.h的源代码为:
在任何编程语言中使用win32 api loadlibrary都可以加载这个dll,而使用getprocaddress(hdll, "fft")则可以获得函数fft的地址,读者所提到的delphi当然也不例外。
这个dll中有两点需要注意:
(1)使用extern "c"修饰函数声明,否则,生成的dll只能供c++调用;
(2)使用__stdcall修饰函数声明及定义,__stdcall是windows api的函数调用方式。


讨论区