Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14523520
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 21:29:10

下载本文示例代码
  (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()* 参数:* complex * TD - 指向时域数组的指针* complex * FD - 指向频域数组的指针* r -2的幂数,即迭代次数* 返回值: 无。* 说明:该函数用来实现快速傅立叶变换*/void FFT(complex * TD, complex * FD, int r){  LONG count; // 傅立叶变换点数 int i,j,k; // 循环变量 int bfsize,p; // 中间变量 double angle; // 角度  complex *W,*X1,*X2,*X; count = 1 << r; //傅立叶变换点数 // 分配运算所需存储器 W = new complex[count / 2]; X1 = new complex[count]; X2 = new complex[count]; // 计算加权系数 for(i = 0; i < count / 2; i ) {  angle = -i * PI * 2 / count;  W[i] = complex (cos(angle), sin(angle)); } // 将时域点写入X1 memcpy(X1, TD, sizeof(complex) * 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 * (1<using namespace std;extern "C" void __declspec(dllexport) __stdcall FFT(complex * TD, complex * FD, int r);#define PI 3.1415926#endiffft.cpp的源代码为:/* 文件名:fft.cpp */#include "fft.h"void __stdcall FFT(complex * TD, complex * FD, int r){ …//读者提供的函数代码}  在任何编程语言中使用Win32 API LoadLibrary都可以加载这个DLL,而使用GetProcAddress(hDll, "FFT")则可以获得函数FFT的地址,读者所提到的Delphi当然也不例外。  这个DLL中有两点需要注意:  (1)使用extern "C"修饰函数声明,否则,生成的DLL只能供C 调用;  (2)使用__stdcall修饰函数声明及定义,__stdcall是Windows API的函数调用方式。共3页。 1 2 3 :   (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()* 参数:* complex * TD - 指向时域数组的指针* complex * FD - 指向频域数组的指针* r -2的幂数,即迭代次数* 返回值: 无。* 说明:该函数用来实现快速傅立叶变换*/void FFT(complex * TD, complex * FD, int r){  LONG count; // 傅立叶变换点数 int i,j,k; // 循环变量 int bfsize,p; // 中间变量 double angle; // 角度  complex *W,*X1,*X2,*X; count = 1 << r; //傅立叶变换点数 // 分配运算所需存储器 W = new complex[count / 2]; X1 = new complex[count]; X2 = new complex[count]; // 计算加权系数 for(i = 0; i < count / 2; i ) {  angle = -i * PI * 2 / count;  W[i] = complex (cos(angle), sin(angle)); } // 将时域点写入X1 memcpy(X1, TD, sizeof(complex) * 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 * (1<using namespace std;extern "C" void __declspec(dllexport) __stdcall FFT(complex * TD, complex * FD, int r);#define PI 3.1415926#endiffft.cpp的源代码为:/* 文件名:fft.cpp */#include "fft.h"void __stdcall FFT(complex * TD, complex * FD, int r){ …//读者提供的函数代码}  在任何编程语言中使用Win32 API LoadLibrary都可以加载这个DLL,而使用GetProcAddress(hDll, "FFT")则可以获得函数FFT的地址,读者所提到的Delphi当然也不例外。  这个DLL中有两点需要注意:  (1)使用extern "C"修饰函数声明,否则,生成的DLL只能供C 调用;  (2)使用__stdcall修饰函数声明及定义,__stdcall是Windows API的函数调用方式。共3页。 1 2 3 : 下载本文示例代码


VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例VC 动态链接库编程之DLL典型实例
阅读(122) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~