cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2067|回复: 5

[文章分享] DLL参数与LabVIEW资料类型匹配

[复制链接]
发表于 2009-3-28 20:03:20 | 显示全部楼层 |阅读模式
本帖最后由 fjczd 于 2009-3-28 20:08 编辑

见楼下
 楼主| 发表于 2009-3-28 20:08:06 | 显示全部楼层
上面是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
 楼主| 发表于 2009-3-28 20:09:09 | 显示全部楼层
(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 来开发自己的硬
件设备驱动程序。
 楼主| 发表于 2009-3-28 20:13:31 | 显示全部楼层
本帖最后由 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》目录
发表于 2009-4-29 09:37:58 | 显示全部楼层
发表于 2009-4-29 20:11:42 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2024-5-18 18:18 , Processed in 0.515209 second(s), 7 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表