当前位置:首页 > 多媒体相关

VC++动态链接库编程之DLL典型实例



热门问答:
  • WinForm 嵌入 WebForm 后,如何从 WebForm 向 WinForm 传递参数? [详细内容]
  • 请骆驼的泪进来 [详细内容]
  • 如何自己编程读取证书文件的内容? [详细内容]
  • 简单的问题? [详细内容]
  • 我实在是没有招数了。为什么相同的用法,::Ellipse,而::Rectangle会出问题。300分! [详细内容]

  • 推荐阅读
      · 在手机上“看”奥运的前提条件
        摘要: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的函数调用方式。

    讨论区

    Login