C++ dll 封装实例

831 篇文章 16 订阅
300 篇文章 0 订阅

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值