基于动态链接库的FAMOS二次开发方法研究
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
hpcurve一’y【lx】_(noat)(a·sin(fx)); GlobalunIock(hCurve);//解锁内存块J
return hCurve; l
步骤2:定义波形数据结构体。
//DLLTEST.h
#pragma pack(1) //定义结构DLL—WAVE,其中包含了测量的数值和其他一 //些附加信息
FAMOS自身的模块加载定义文件},def的定义格式
如下:
DLL32”DLLName,FctName FamosName, ReAccess ReType——DLL.ReType.—FAMOS ReNumber elements,
Parl一Access Parl一Type—DLL.ParlJype
FAMOS Parl——Number_elements,
Par2一Access Par2一Type—DLL.Par2一Type一
《散型机与应用)2003.tlt.3B"1 1期
万方数据
——·蛊圆矗蠡童岛-————————————一一
FAMOS Par2——Number——elements, Par3…一.…”
参数说明如下: DLL32:基本格式,表示32位的DLL,若为16位则 表示为DLLl6 DLLName:动态链接库的名字。表示方法:name.C FctName:在DLL中的函数名 FamosName:在FAMOS中的函数名 Re—Access:定义返回值访问方式 ReType—DLL:返回值在DLL中的数据类型 ReType—FAMOS:返回值在FAMOS中的数据类型 ParN—Access:函数中第N个参数的访问方式 ParN—Type—DLL:函数中第N个参数在DLL中的数 据类型 ParN—Type—FAMOS:函数中第N个参数在FAMOS 中的数据类型 ParN—Number elements:元素数目 以上参数中的ReAccess或ParN—Access有3种选 择,与其对应的ParN—Number~elements参数设置为:(1)
MessageBox(O,Text,”DLL function:FatCos”,MB—OK); hpCurve=(DLL_WAVE FAR+)GlobalLock(hCurve);
//锁定内存块 lstr。py(hpcurve一>xUnit,”s”);
lstr。Py(hpcⅢe一>yUnit,”v”);
(1)根据需要编制动态链接库;(2)编制FAMOS特定 加载方式对应的模块定义文件;(3)在FAMOS中加载 DLL;(4)在FAMOS函数分类窗口中添加对应函数组和 函数按钮。 3实例说明
编写动态链接库的工具很多,如Visual c++、Bor— land C++、Delphi等,对于具体方法可以参见相关文档。 下面仅以Visual c++6.0为例,介绍开发应用于FAMOS 的32位动态链接库时应注意的问题。 3.1 FAMOS的函数导入原则
《傲参2机与应用)200S年第1 1期
已的函数库。本文只介绍利用动态链接库对FAMOS进行 二次开发的方法。 2.1 FAMOS=次开发接口介绍
(1)动态链接库的连接方式。应用程序采用隐式链接 和显式链接方式使用DLL。FAMOS对于DLL连接采用显 式链接。FAMOS菜单项中“Options/DLL Functions……” 功能就是对FAMOS模块定义文件进行操作,完成对应 DLL的加载或释放。
FAMOS的应用窗口界面中包含几个部分:菜单项、工 具条、变量列表窗口(Variables)、函数分类窗口(Functions)、 操作窗口(Operation)、公式解说器输出窗口(Output),同时 它还包含了报告生成器、结果编辑器等配套组件。 2 FAnOS二次开发技术介绍
FAMOS包含了二次开发接口,即它可利用用户编制 的动态链接库或IMC公司提供的信号分析套件来扩充自
int、uint?long ulongj charjuchar?float?double、text?dsf?
void共1 3种。其中text是指长度255字节的文字信息, dsf足指具有DLL—WAVE形式的数据结构体。 3.2动态链接库的编制
DLL的种类很多,凡是导出函数符合FAMOS审数导 人原则的动态链接库,就町以在FAMOS中正常使用,这 其中包含WIN32 DLL及MFC DLL。用户可在DLL中添 加对话框等MFC类库资源并进行多个函数的输出, FAMOS对导人函数的个数没有限制。
FAMOS是德国IMC公司早在1988年就推出的以 MS Windows为操作系统的数据信号分析软件。
FAMOS提供了包括FFT、积分、微分、曲线图、直方 图、相位互相关、数字运算等复杂的实时分析功能。用户可 定义的实时测量功能可在线进行测量公式编辑。测量、分析 等工作能在不同的窗口中与波形同时显示并随波形变化 而更新。它可读取多家公司的文件格式,如:SONY、TEAC、 YOKOGAWA?NEC?HIOKIjBOSCH?Tektronix?OROS?HP? Nicolet等,也可通过文件助理(File Assistant)读取其他 文件格式。其内部的数据转换快速而方便,使用时可将采 集到的数据转换为Microsoft Office格式,如Word、Excel 或其他流行的数据处理软件格式,以供进一步的分析和 编写测试报告。测试者在测试现场即可作出最准确的判断 和完美的测试报告。
Project”新建一个工程DLLTEST,包含2个输出函数。
//DI,I,TES一1.cpp
//波形乘2函数 extern”c”一一decl叩。c(dllelport)void Mult2(DLL—WAVE
FAR{P11
//函数的输出有2种方法:①可采用包含导出函数表的对应 //模块定义文件+def,即通过赋一个数值(序号)给链接程序
short Flags; Samples; Time: y[1】;
//未定义 //采样次数,)=2L //触发时间.默认为0 //采样阵列的开始点
l DLL—WAVE;
#pragma pack() 步骤3:编译生成加载于FAMOS中的DLLTEST.dll
文件。 3.3编制FAMOS加载方式对应的模块定义文件
//函数返回存放生成波形的内存块对应的旬柄值
extern”掣一declspec(dllelport)HANDLE RetSine(float a,
int n1
f
DLL—WAVE far}hpCurve;
HANDLE
hCurve;
double
PI=3.14159,dx=0.001,NoOfPoints=2¥P1,
bpCurve一>Name[O】=0; hpCurve一>dX=(float)dx; hpCurve一>X0=0: hpCurve一>F1898=0; hpCurve一>samples=(10“g)(n+NoOfPoints/dx); hpCurve一>Time=0; for(Ix=0,fx=0;fx<(n十NoOfPoints);lx++,fx+=dx)
在编制DLL之前,首先应了解FAMOS函数导入原则。
—— '——
万方数据
(1)使用EAMOS的波形数据存储定义。在对波形进行 必要的处理函数编制时,要得到正确结果,必须使用
FAMOS的波形数据结构体DLI.一WAVE。 (2)函数参数和返回值的数据类型必须符台FAMOS
导人函数的数据类型要求,其数据类型包括short、ushort、
fx,length;
long char
Ix; 7text[255];
le“gth=gizeof‘D1.L—WhVE)+(int)(n·NoOfPoints/dx)+
~8一
sizeof(float); hcurve=clobalAlloc(GHND,(10ng)length); //分配空问 if(hCurve) {sprin叫Text,”返回正弦波幅值为:%g、11周期为:2PI”,a);
基于动态链接库的FAMOS二次开发方法研究
西安工业学院计算机科学与工程系(71 003 2) 于志华 雷志勇
摘要:FAMOS软件是为测试技术的特殊要求而定制的一套信号分析软件。本文重点介绍了 在FAMOS二次开发中使用动态链接库的实现方法。
关键词:FAMOS软件 信号分析软件 二次开发 动态链接库
数字信号处理是利用计算机或专用处理设备以数字 的形式对信号进行采集、变换、滤波、估值、增强、压缩、识 别等处理,以得到符合人们需要的信号形式。采用先进、 适用的信号分析处理方法,可以研究系统的稳定性,选择 系统参数,验证系统的理论和算法。
使用中需注意: (1)某些参数在定义时可省略表示,但空格不能省去。 (2)DLL外部传送的指针必须是远指针FAR。 根据各个参数的具体含义.该动态链接库的FAMOS 模块定义文件famos.def为:
类型定Ty义pe中—有FA效M,OS表包示含没3种有类返型 回值:)(,1)表vo示id为(只 …v在d;返(回2)值da的ta
(数据无论是int或long等类型,均定义为data)。表示为 “ne”;(3)text(数据类型为文本信息,与之对应的…Type—DLL 也必须为text),表示为“tx”。
FAMOS(Fast Analysis&Monitoring Of Signal)软 件是在实验室或试验平台中为测试技术的特殊要求所定 制的一套信弓分析软件,它是目前欧洲市场占有率最高
的信 号分析软件之一,现刚刚进入国内市场。FAMOS的使
用如同一部工程计算机,并同Tektronix、Gould、Nicolet 等仪器厂商的产品搭配销售。 1 FAMOS简介
(2)动态链接库导出函数的调用方式。Windows动态 链接库是包含数据和函数的模块,可以被其他可执行文 件(EXE、DLL、OCX等)调用。动态链接库包含2种函数: 输出(Exported)函数和内部(Internal)函数。输出函数可以 被其他模块调用,而内部函数则只能在动态链接库内部 使用。信号分析软件FAMOS具备标准的DLL接口,允许 导人任何由Windows动态链接库导出的函数。
typedef struct
Biblioteka Baidu
{
char
char
xUnit[13l; yUnit[13】-
/Ix轴单位 //y轴单位
char float float
Name【12];
//波形名称
dX;
//x轴增量.测量间隔>0.0
XO;//x轴偏移量,即第一次采样x的坐标
unsigned long
long float
//来导出函数;②采用MFC提供的修饰符号一declspec(dll一
//export) {long i;
for(i=O;i<PI->Samples;i++) PI一’y【i】十=2;
MessageBox(O,”数据己进行了乘2运算”,。DLL function: Muh2”.MB—OK);
//产生正弦波形函数(参数a为波形幅值,n为周期个数)
Direct:直接方式,…1’(默认,可省略表示);(2)Pointer:指
针方式,“}”f一般用于对现有波形的操作);(3)Handle:句 柄方式,“+”(一般用于函数产生波形的返回)。
Type—DLL包含了13种数据类型.其中包括FAMOS 自身定义的数据类型dsf和text。dsf类型是指其数据方式 为结构体DLLWAVE。对应数据访问方法一般为pointer 或handle。text类型是指长度255字节的文字信息,它必 须通过远指针FAR进行访问,即数据访问方法为pointer。
FAMOS包含二类函数调用约定,即c和Pascal。这二 者的区别是:c约定规定参数传递顺序是从右到左,即最 右边的参数最先压栈,由调用者恢复堆栈指针;而Pascal 约定正好相反,它规定参数是从左向右传递,由被调用者 恢复堆栈。通常情况下,32位DLL函数的导入使用C调 用约定,而16位DLL函数的导人则使用Pascal约定。 2.2开发过程
下面以具有简单输出函数的DLL为例说明添加函数 的基本方法。虽然在实际应用中添加函数的方法更复杂且 更有意义,但其方法和动态链接库中添加函数的基本方法 足一样的。
功能要求:完成返回一个正弦波形,其周期为2P1、波 形长度和幅值可定并且可对波形进行乘2运算这二种函 数功能DLL的编制。
步骤1:利用VC6.0中的32位DLL“a simple DLL
return hCurve; l
步骤2:定义波形数据结构体。
//DLLTEST.h
#pragma pack(1) //定义结构DLL—WAVE,其中包含了测量的数值和其他一 //些附加信息
FAMOS自身的模块加载定义文件},def的定义格式
如下:
DLL32”DLLName,FctName FamosName, ReAccess ReType——DLL.ReType.—FAMOS ReNumber elements,
Parl一Access Parl一Type—DLL.ParlJype
FAMOS Parl——Number_elements,
Par2一Access Par2一Type—DLL.Par2一Type一
《散型机与应用)2003.tlt.3B"1 1期
万方数据
——·蛊圆矗蠡童岛-————————————一一
FAMOS Par2——Number——elements, Par3…一.…”
参数说明如下: DLL32:基本格式,表示32位的DLL,若为16位则 表示为DLLl6 DLLName:动态链接库的名字。表示方法:name.C FctName:在DLL中的函数名 FamosName:在FAMOS中的函数名 Re—Access:定义返回值访问方式 ReType—DLL:返回值在DLL中的数据类型 ReType—FAMOS:返回值在FAMOS中的数据类型 ParN—Access:函数中第N个参数的访问方式 ParN—Type—DLL:函数中第N个参数在DLL中的数 据类型 ParN—Type—FAMOS:函数中第N个参数在FAMOS 中的数据类型 ParN—Number elements:元素数目 以上参数中的ReAccess或ParN—Access有3种选 择,与其对应的ParN—Number~elements参数设置为:(1)
MessageBox(O,Text,”DLL function:FatCos”,MB—OK); hpCurve=(DLL_WAVE FAR+)GlobalLock(hCurve);
//锁定内存块 lstr。py(hpcurve一>xUnit,”s”);
lstr。Py(hpcⅢe一>yUnit,”v”);
(1)根据需要编制动态链接库;(2)编制FAMOS特定 加载方式对应的模块定义文件;(3)在FAMOS中加载 DLL;(4)在FAMOS函数分类窗口中添加对应函数组和 函数按钮。 3实例说明
编写动态链接库的工具很多,如Visual c++、Bor— land C++、Delphi等,对于具体方法可以参见相关文档。 下面仅以Visual c++6.0为例,介绍开发应用于FAMOS 的32位动态链接库时应注意的问题。 3.1 FAMOS的函数导入原则
《傲参2机与应用)200S年第1 1期
已的函数库。本文只介绍利用动态链接库对FAMOS进行 二次开发的方法。 2.1 FAMOS=次开发接口介绍
(1)动态链接库的连接方式。应用程序采用隐式链接 和显式链接方式使用DLL。FAMOS对于DLL连接采用显 式链接。FAMOS菜单项中“Options/DLL Functions……” 功能就是对FAMOS模块定义文件进行操作,完成对应 DLL的加载或释放。
FAMOS的应用窗口界面中包含几个部分:菜单项、工 具条、变量列表窗口(Variables)、函数分类窗口(Functions)、 操作窗口(Operation)、公式解说器输出窗口(Output),同时 它还包含了报告生成器、结果编辑器等配套组件。 2 FAnOS二次开发技术介绍
FAMOS包含了二次开发接口,即它可利用用户编制 的动态链接库或IMC公司提供的信号分析套件来扩充自
int、uint?long ulongj charjuchar?float?double、text?dsf?
void共1 3种。其中text是指长度255字节的文字信息, dsf足指具有DLL—WAVE形式的数据结构体。 3.2动态链接库的编制
DLL的种类很多,凡是导出函数符合FAMOS审数导 人原则的动态链接库,就町以在FAMOS中正常使用,这 其中包含WIN32 DLL及MFC DLL。用户可在DLL中添 加对话框等MFC类库资源并进行多个函数的输出, FAMOS对导人函数的个数没有限制。
FAMOS是德国IMC公司早在1988年就推出的以 MS Windows为操作系统的数据信号分析软件。
FAMOS提供了包括FFT、积分、微分、曲线图、直方 图、相位互相关、数字运算等复杂的实时分析功能。用户可 定义的实时测量功能可在线进行测量公式编辑。测量、分析 等工作能在不同的窗口中与波形同时显示并随波形变化 而更新。它可读取多家公司的文件格式,如:SONY、TEAC、 YOKOGAWA?NEC?HIOKIjBOSCH?Tektronix?OROS?HP? Nicolet等,也可通过文件助理(File Assistant)读取其他 文件格式。其内部的数据转换快速而方便,使用时可将采 集到的数据转换为Microsoft Office格式,如Word、Excel 或其他流行的数据处理软件格式,以供进一步的分析和 编写测试报告。测试者在测试现场即可作出最准确的判断 和完美的测试报告。
Project”新建一个工程DLLTEST,包含2个输出函数。
//DI,I,TES一1.cpp
//波形乘2函数 extern”c”一一decl叩。c(dllelport)void Mult2(DLL—WAVE
FAR{P11
//函数的输出有2种方法:①可采用包含导出函数表的对应 //模块定义文件+def,即通过赋一个数值(序号)给链接程序
short Flags; Samples; Time: y[1】;
//未定义 //采样次数,)=2L //触发时间.默认为0 //采样阵列的开始点
l DLL—WAVE;
#pragma pack() 步骤3:编译生成加载于FAMOS中的DLLTEST.dll
文件。 3.3编制FAMOS加载方式对应的模块定义文件
//函数返回存放生成波形的内存块对应的旬柄值
extern”掣一declspec(dllelport)HANDLE RetSine(float a,
int n1
f
DLL—WAVE far}hpCurve;
HANDLE
hCurve;
double
PI=3.14159,dx=0.001,NoOfPoints=2¥P1,
bpCurve一>Name[O】=0; hpCurve一>dX=(float)dx; hpCurve一>X0=0: hpCurve一>F1898=0; hpCurve一>samples=(10“g)(n+NoOfPoints/dx); hpCurve一>Time=0; for(Ix=0,fx=0;fx<(n十NoOfPoints);lx++,fx+=dx)
在编制DLL之前,首先应了解FAMOS函数导入原则。
—— '——
万方数据
(1)使用EAMOS的波形数据存储定义。在对波形进行 必要的处理函数编制时,要得到正确结果,必须使用
FAMOS的波形数据结构体DLI.一WAVE。 (2)函数参数和返回值的数据类型必须符台FAMOS
导人函数的数据类型要求,其数据类型包括short、ushort、
fx,length;
long char
Ix; 7text[255];
le“gth=gizeof‘D1.L—WhVE)+(int)(n·NoOfPoints/dx)+
~8一
sizeof(float); hcurve=clobalAlloc(GHND,(10ng)length); //分配空问 if(hCurve) {sprin叫Text,”返回正弦波幅值为:%g、11周期为:2PI”,a);
基于动态链接库的FAMOS二次开发方法研究
西安工业学院计算机科学与工程系(71 003 2) 于志华 雷志勇
摘要:FAMOS软件是为测试技术的特殊要求而定制的一套信号分析软件。本文重点介绍了 在FAMOS二次开发中使用动态链接库的实现方法。
关键词:FAMOS软件 信号分析软件 二次开发 动态链接库
数字信号处理是利用计算机或专用处理设备以数字 的形式对信号进行采集、变换、滤波、估值、增强、压缩、识 别等处理,以得到符合人们需要的信号形式。采用先进、 适用的信号分析处理方法,可以研究系统的稳定性,选择 系统参数,验证系统的理论和算法。
使用中需注意: (1)某些参数在定义时可省略表示,但空格不能省去。 (2)DLL外部传送的指针必须是远指针FAR。 根据各个参数的具体含义.该动态链接库的FAMOS 模块定义文件famos.def为:
类型定Ty义pe中—有FA效M,OS表包示含没3种有类返型 回值:)(,1)表vo示id为(只 …v在d;返(回2)值da的ta
(数据无论是int或long等类型,均定义为data)。表示为 “ne”;(3)text(数据类型为文本信息,与之对应的…Type—DLL 也必须为text),表示为“tx”。
FAMOS(Fast Analysis&Monitoring Of Signal)软 件是在实验室或试验平台中为测试技术的特殊要求所定 制的一套信弓分析软件,它是目前欧洲市场占有率最高
的信 号分析软件之一,现刚刚进入国内市场。FAMOS的使
用如同一部工程计算机,并同Tektronix、Gould、Nicolet 等仪器厂商的产品搭配销售。 1 FAMOS简介
(2)动态链接库导出函数的调用方式。Windows动态 链接库是包含数据和函数的模块,可以被其他可执行文 件(EXE、DLL、OCX等)调用。动态链接库包含2种函数: 输出(Exported)函数和内部(Internal)函数。输出函数可以 被其他模块调用,而内部函数则只能在动态链接库内部 使用。信号分析软件FAMOS具备标准的DLL接口,允许 导人任何由Windows动态链接库导出的函数。
typedef struct
Biblioteka Baidu
{
char
char
xUnit[13l; yUnit[13】-
/Ix轴单位 //y轴单位
char float float
Name【12];
//波形名称
dX;
//x轴增量.测量间隔>0.0
XO;//x轴偏移量,即第一次采样x的坐标
unsigned long
long float
//来导出函数;②采用MFC提供的修饰符号一declspec(dll一
//export) {long i;
for(i=O;i<PI->Samples;i++) PI一’y【i】十=2;
MessageBox(O,”数据己进行了乘2运算”,。DLL function: Muh2”.MB—OK);
//产生正弦波形函数(参数a为波形幅值,n为周期个数)
Direct:直接方式,…1’(默认,可省略表示);(2)Pointer:指
针方式,“}”f一般用于对现有波形的操作);(3)Handle:句 柄方式,“+”(一般用于函数产生波形的返回)。
Type—DLL包含了13种数据类型.其中包括FAMOS 自身定义的数据类型dsf和text。dsf类型是指其数据方式 为结构体DLLWAVE。对应数据访问方法一般为pointer 或handle。text类型是指长度255字节的文字信息,它必 须通过远指针FAR进行访问,即数据访问方法为pointer。
FAMOS包含二类函数调用约定,即c和Pascal。这二 者的区别是:c约定规定参数传递顺序是从右到左,即最 右边的参数最先压栈,由调用者恢复堆栈指针;而Pascal 约定正好相反,它规定参数是从左向右传递,由被调用者 恢复堆栈。通常情况下,32位DLL函数的导入使用C调 用约定,而16位DLL函数的导人则使用Pascal约定。 2.2开发过程
下面以具有简单输出函数的DLL为例说明添加函数 的基本方法。虽然在实际应用中添加函数的方法更复杂且 更有意义,但其方法和动态链接库中添加函数的基本方法 足一样的。
功能要求:完成返回一个正弦波形,其周期为2P1、波 形长度和幅值可定并且可对波形进行乘2运算这二种函 数功能DLL的编制。
步骤1:利用VC6.0中的32位DLL“a simple DLL