Labview与其他应用程序的接口设计
调用自己开发DLL中的函数
供项目使用。
下面就以一个简单的求数组求和的项目为例来说明这种开发过程。
1. 在LabVIEW 中创建DLL 函数原型。
a) 在LabVIEW 的diagram 面板上添加一个CFN 并通过其右键菜单打开CFN 的配置对话框;
b) 使“Library Name or Path”输入框为空;
c) 指定函数名“Function Name”和调用方式“Calling Conventions”分别为add_num和C;
d) 重命名返回参数的名称为“error”,并指定其类型为Numeric 的Signed 32-bit Integer;
e) 用“Add a Parameter After”按钮添加第一个参数p,指定其类型为Array 的4-byte Single 并设定Array Format 为Array Data Pointer;
f) 用“Add a Parameter After”按钮添加第二个参数size,指定其类型为为Numeric 的Signed32-bit Integer 并设置参数传递方式为Value;
g) 用“Add a Parameter After”按钮添加第三个参数sum,指定其类型为为Numeric 的4-byteSingle 并设置参数传递方式为Pointer to Value;
h) 至此,函数的原型应如下图所示
long add_num(float *p, long size, float *sum);
i) 确定后会发现CFN 根据配置自动进行了更新更新后的情况如图示。
2. 生成.C 或.C++文件,完成实现函数功能的代码并为函数添加DLL 导出声明;
在CFN 节点上通过右键菜单选择“Create .C File…”生成mydll.c 文件,其内容如下:
将以下代码插入到句之后实现函数的功能。
int i;
float tmpSum = 0;
if(p != NULL)
{
for(i=0; i < size; i++)
tmpSum = tmpSum + p[i];
}
else
return (1);
* sum = tmpSum;
return (0);
在完成实现函数功能的代码后,还必须为函数添加导出声明以便能在LabVIEW 中使用这些函数。
C/C++声名导出函数的关键字是_declspec (dllexport),使用该关键字可以代替模块定义文件。
对于此处的例子来说,只要在函数声明和定义部分添加关键字即可。最终代码如下:
3. 在外部IDE(以VC++为例)中创建DLL 项目并编译生成.dll 文件。
用VC++ 6.0 进行编译生成.dll 文件的步骤如下:
a) 在VC++中创建一个DLL 项目,如果在DLL 中没有使用MFC 就选择创建“Win32Dynamic-Link Library”,否则选择“MFC AppWizard(dll)”,对此例子来说选择前者。选定后进入下一步选择创建一个空的DLL 项目。
b) 通过Project»Add to Project»Files 添加mydll.c 到创建的mydll 项目之中
c) 通过Project»Settings 打开项目配置对话框,选择C/C++选项卡。
d) 配置项目的All Configurations。选择Settings For 下拉列表框中的All Configurations,选择Category下拉列表框中的Code Generation,最后设置Struct member alignment 为1 Byte。
e) 配置项目的Release 版本。选择Settings For 下拉列表框中的Win32 Release,选择Category下拉列表框中的Code Generation,最后从Use run-time library 下拉列表框中选择Multithreaded DLL。配置结果如图。
f) 配置项目的Debug 版本。选择Settings For 下拉列表框中的Win32 Debug,选择Category
下拉列表框中的Code Generation,最后从Use run-time library 下拉列表框中选择Debug
Multithreaded DLL。配置结果如图
4. 在LabVIEW 项目中调用.dll 中的函数。创建如图所示的VI,其中Array 为Representation»Single Precision 类型的数组,Sum 为Representation»Single Precision 类型的Indicator, error 为Representation»Long 类型的Indicator。运行后可以看到对数组求和的结果。
Labview接口设 相关文章:
- 频宽、取样速率及奈奎斯特定理(09-14)
- 为什么要进行信号调理?(09-30)
- IEEE802.16-2004 WiMAX物理层操作和测量(09-16)
- 为任意波形发生器增加价值(10-27)
- 基于PCI 总线的高速数据采集系统(09-30)
- 泰克全新VM6000视频测试仪助力数字电视等产品测试 (10-06)