动态链接库DLL.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态链接库DLL实现了库的共享,体现了代码重用的思想。我们可以把广泛的、具有共性的、能够多次被利用的函数和类定义在库中。这样,在再次使用这些函数和类的时候,就不再需要重新添加与这些函数和类相关的代码。具有共性的问题大致有哪些呢?笔者归纳如下:? (1)通用的算法 图像处理、视频音频解码、压缩与解压缩、加密与解密通常采用某些特定的算法,这些算法较固定且在这类程序中往往经常被使用。 (2)纯资源DLL 我们可以从DLL中获取资源,对于一个支持多种语言的应用程序而言,我们可以判断操作系统的语言,并自动为应用程序加载与OS对应的语言。这是多语言支持应用程序的一般做法。 (3)通信控制DLL 串口、网口的通信控制函数如果由DLL提供则可以使应用程序轻松不少。在工业控制、modem程序甚至socket通信中,经常使用通信控制DLL。 本节将给出DLL的三个典型应用实例。 7.1 算法DLL 我们直接用读者的一个提问作为例子。 宋宝华先生,您好! 我在上看到你连载的《VC++动态链接库编程》,觉得非常好。我以前主要是用Delphi的,C/C++学过,对Win32和VCL比较熟悉,但是没有接触过VC++,对MFC很陌生。这段时间和一个同学合作做光学成像的计算机模拟,用到傅立叶变换,手里面有例程是VC++写的。我们的界面是用Delphi开发,需要将其傅立叶变换功能提出做一个DLL供Delphi调用。苦于不懂MFC,试了很多方法,都不成功,最后只得采用折衷方案,简单修改一下程序,传一个参数进去,当作exe来调用,才没有耽搁后续进程。 …… 谢谢! 致 礼! 某某 学习过较高级别数学(概率统计与随机过程)、信号与线性系统及数字信号处理的读者应该知道,傅立叶变换是一种在信号分析中常用的算法,用于时域和频域的相互转换。FFT变换算法通用而有共性,我们适宜把它集成在一个DLL中。 随后,这位读者提供了这样的一个函数:/* 函数名称:FFT()* 参数:* complexdouble * TD - 指向时域数组的指针* complexdouble * FD - 指向频域数组的指针* r -2的幂数,即迭代次数* 返回值: 无。* 说明:该函数用来实现快速傅立叶变换*/void FFT(complexdouble * TD, complexdouble * FD, int r){? LONG count; // 傅立叶变换点数 int i,j,k; // 循环变量 int bfsize,p; // 中间变量 double angle; // 角度? complexdouble *W,*X1,*X2,*X; count = 1 r; //傅立叶变换点数 // 分配运算所需存储器 W = new complexdouble[count / 2]; X1 = new complexdouble[count]; X2 = new complexdouble[count]; // 计算加权系数 for(i = 0; i count / 2; i++) { angle = -i * PI * 2 / count; W[i] = complexdouble (cos(angle),?sin(angle)); } // 将时域点写入X1 memcpy(X1, TD, sizeof(complexdouble) * count); // 采用蝶形算法进行快速傅立叶变换 for(k = 0; k r; k++) { for(j = 0; j 1 k; j++) {  bfsize = 1 (r-k);  for(i = 0; i bfsize / 2; i++)  { p = j * bfsize; X2[i + p] = X1[i + p] + X1[i + p + bfsize / 2]; X2[i + p + bfsize / 2] = (X1[i + p] - X1[i + p + bfsize / 2]) * W[i * (1k)];  } } X = X1; X1 = X2; X2 = X; } // 重新排序 for(j = 0; j count; j++) { p = 0; for(i = 0; i r; i++) {  if (j(1i))  { p+=1(r-i-1);  } } FD[j]=X1[p]; } // 释放内存 delete W; delete X1; delete X2;} 既然有了FFT这个函数,我们要把它做在DLL中,作为DLL的一个接口将是十分简单的,其步骤如下: (1)利用MFC向导建立一个非MFC DLL; (2)在工程中添加fft.h和fft.cpp两个文件; fft.h的源代码为:#ifndef FFT_H#d

文档评论(0)

shigai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档