[文章分享] DLL参数与LabVIEW资料类型匹配
本帖最后由 fjczd 于 2009-3-28 20:08 编辑见楼下 上面是DLL资料类型,下面是LabVIEW
BOOL
I32
BOOLEAN
U8
BYTE
U8
CHAR
String
COLORREF
U32 with conversion
DWORD
U32
FLOAT
SGL
HWND
U32
INT
I32
LONG
I32
SHORT
I16
SIZE_T
U32
SSIZE_T
I32
UCHAR
String
UINT
U32
ULONG
U32
USHORT
U16
WORD
U16
char
String
double
DBL
float
SGL
int
I32
long
I32
short
I16
unsigned char
String
unsigned int
U32
unsigned long
U32
unsigned short
U16
cmplx64
CSG
cmplx128
CDB
cmplxExt
CXT
CStr
String
float32
SGL
float64
DBL
floatExt
EXT
int8
I8
int16
I16
int32
I32
LStrHandle
String
LVBoolean
Boolean
uInt8
U8
uInt16
U16
uInt32
U32
1-D Array
1-D Array
2-D Array
2-D Array
3-D Array
3-D Array
1-D Array Handle
1-D Array
2-D Array Handle
2-D Array
3-D Array Handle
3-D Array
Simple Cluster
Cluster
Simple Cluster String & Array
Cluster
Simple Cluster String & Array with Wrapper
Cluster
Complex Cluster
Cluster
Cluster with non-1-byte packing
Cluster (1) 关于LabVIEW 中线程调用方式有Run in
UI Thread 和Reent rant 两种调用方式。
在DLL 只被一个线程调用的情况下,两种调用
方式都可选择,但在多线程调用情况下,需注意选
择。Run in UI Thread 表示在用户接口线路中调
用,DLL 的执行期将等到用户接口线程(在此即
LabVIEW环境下的VI 应用程序) 执行DLL 的导出
函数调用时才开始;Reent rant 表示允许多个线程同
时调用这个DLL 。如果你确定编制的DLL 为线程
安全———简单地说,就是编制DLL 过程中,充分考
虑了线程保护的同步机制,如使用临界区、互斥、信
号量等,那么可以选用Reent rant 方式,这将有助于
提高DLL 调用的性能;如果你不确定DLL 是否为
线程安全,选Run in UI Thread。建议选Run in UI
Thread。
(2) 关于LabVIEW 中节点参数的设置。对于
所调用的DLL 库函数的参数类型,如果在配置框中
找不到匹配的类型,可以在Type 框中选Adapt to
Type ,Data Format 框中选Handles by Value ,表示将
编程时指定的LabVIEW数据类型与该参数数据类
型进行自动匹配。
(3) 关于LabVIEW中数组的初始化:在功能板
中选择Functions/ Array/ Initialize Array 建立一维数
组,用来存放某个通道采样值,数组初始化时,Di2
mension Size 指的是一维数组的长度,并不是指数组
的维数,这点要特别注意。
(4) 关于与LabVIEW进行数据交换的DLL 的
编译环境,建议选用Visual C + + 6. 0 。
(5) 关于自己设计制作数据采集卡Windows 驱
动程序的开发。目前,常用的Windows 设备驱动程
序开发工具有:J ungo 公司的WinDriver 、KernelDriv2
er ,NuMega 公司的DriverStudio 等。对于驱动程序
开发的新手,推荐使用WinDriver 来开发自己的硬
件设备驱动程序。 本帖最后由 fjczd 于 2009-3-28 20:14 编辑
原文见这里
http://ruanqizhen.spaces.live.com/Blog/cns!5852D4F797C53FB6!3011.entry
调用动态链接库 3 - 简单数据类型参数的设置
复杂问题先从简单地说起,在DLL和LabVIEW之间传递参数,最常用的三种数据类型是:数值类型、字符串、数值型数组。这几种类型的参数配置起来还是比较简单的。
1. 数值类型
LabVIEW 多种不同精度的数值类型与C语言中的数值类型的匹配是相当直观的,比如 4-byte Single 对应 C 语言中的 float。LabVIEW 自带的例子“LabVIEW 8.5\examples\dll\data passing\Call Native Code.llb”中详细的列出了简单数据类型在 LabVIEW 与 C 之间的对应关系。
C 语言中经常把指针,或者数据的地址在函数间传递。在32位操作系统中,可以使用int32数值来表示指针。因此,当需要在LabVIEW中传递指针数据时,可以使用I32或U32数值类型来表示这个地址类型的数据。但是,64位的程序中,数据的地址只能使用I64或U64来表示。这样,如果一个调用了DLL函数的VI,并且函数参数中有地址型数据,使用固定数据类型的数值来表示地址,就要准备两份代码。解决方法就是使用 LabVIEW 中的新的数据类型 Pointer-sized Integer。这个数据类型的长度在不同的平台上会自动使用32位或64位长度。
如果在C语言函数参数声明中有const关键字,可以选中Constant选项。
输入/输出
输入
输出或兼作输入输出
C语言声明
float red;
float* red;
LabVIEW
中的配置
LabVIEW
的使用
2. 布尔类型
布尔类型在 DLL 函数和 LabVIEW VI 之间传递没有专有的数据类型,是利用数值类型来传递的。输入时先把布尔值转变为数值,在传递给DLL函数;输出时再把数值转为布尔值。
输入/输出
输入
输出或兼作输入输出
C语言声明
bool red;
bool* red;
LabVIEW
中的配置
LabVIEW
的使用
3. 数值型数组
对于数组的传递,LabVIEW 只支持 C 数据类型中的数值型数组。传递数组类型需要注意的的是“Array Format”要选择“Array Data Pointer”。这个设置中还有其他两个选项,像这种带有“Handle”的参数类型都是表示LabVIEW定义的特殊类型的。在第三方的DLL中不会使用到。
数组参数作为输出值时,要记得为输出的数组数据开辟空间。开辟数据空间的方法有两种:
第一种方法,创建一个长度满足要求的数组,作为初始值传递给参数,输出数的数据就会被放置在输入数组的所在的内存空间内。
第二种方法是直接在参数配置面板上进行设置。在 Minimum size 中写入一个固定的数值,LabVIEW 就会按此大小为输出的数组开辟空间。在 Minimum size 中选择函数的其它数值参数,而不是固定数值。这样 LabVIEW 会按照当时被选择的参数的值的大小来开辟空间。
输入/输出
输入
输出或兼作输入输出
C语言声明
int values[];
int values[];
LabVIEW
中的配置
LabVIEW
的使用
4. 字符串类型
字符串与使用与数组是非常类似的,实际上在C语言中字符串就是一个I8数组。
输入/输出
输入
输出或兼作输入输出
C语言声明
char* name;
char* name;
LabVIEW
中的配置
LabVIEW
的使用
《我和 LabVIEW》目录 很需要,收藏了 我顶啊!多谢!
页:
[1]