LV 6.1 调用dll的一个问题
时间:12-13
整理:3721RD
点击:
用的是优采公司的ua302数据采集器,他们提供了一个ua300.dll,我在调用里面的readdate函数时在输出参数端接了个数据数组指示器,却得不到任何数据,而这个dll节点明明执行了。
怎么回事呢?下面是函数说明:
6.readdata
函数形式:void _stdcall readdata(HANDLE husb, short *addat,unsigned short fcode, long leng)
说 明: 该函数用于多点连续(单通道或多通道)数据采集.此函数与 输入参数: husb 在打开设备时得到的设备句柄.
fcode 频率码=6000000(Η z )/ 采样频率(Η z )
leng 采样数据的总点数(一点为16 位字), 注意,需是32 的倍数.该参数是长整数,
意味着只要数据数组开的足够大,可以一次采集几十兆字节以上的数据.
输出参数: *addat 数据数组.采集数据存放于数据数组.
怎么回事呢?下面是函数说明:
6.readdata
函数形式:void _stdcall readdata(HANDLE husb, short *addat,unsigned short fcode, long leng)
说 明: 该函数用于多点连续(单通道或多通道)数据采集.此函数与 输入参数: husb 在打开设备时得到的设备句柄.
fcode 频率码=6000000(Η z )/ 采样频率(Η z )
leng 采样数据的总点数(一点为16 位字), 注意,需是32 的倍数.该参数是长整数,
意味着只要数据数组开的足够大,可以一次采集几十兆字节以上的数据.
输出参数: *addat 数据数组.采集数据存放于数据数组.
再次问大侠该怎么做?
贴一下你的vi可能是short *addat的格式有错
你数组可能没有初始化吧。我猜的。
不行还是转VB吧。LV有时候调用DLL很奇怪的。记得以前那个得到计算机名的vi的么。查注册表的。还奇怪为什么要这么复杂呢。要知道有个api,GetComputerNameA就是查计算机名字的。在kenel32.dll里面。但是我调用dll就不干活。同样在那个dll里面的GetSystemDirectoryA就可以干活。而这两个函数的输入,输出参数类型完全一样。
在 peaceangel (幽灵杀手) 的大作中提到: 】
: 再次问大侠该怎么做?
我给这个参数指定的格式是 short int的 array类型
数组不是自动初始化的吗,放一个指示器,全部初始化为0,数组长度也是自动分配的啊。
我刚来的这里,没有看过那个vi
我是这样做的
先定义一个空数组,把它和它的长度连到的调用dll的vi的
对应输入端口
从输出端引出输出数据
你可以试试
好的,我去试试。只是数组长度好像不用定义?
另外我好像在手册上看到labview不支持指针类型,
而那个函数的返回的就是数组的首地址。
看来只有用cin了,vc还不会,唉……