jidiguxing 发表于 2007-8-21 09:23:06

帮忙看一下,USB调用的DLL问题出在那里?

下面是周公做好的供上位机调用的DLL函数(单片机通过D12芯片与PC连接):
int __stdcall WriteData(int pipenum,unsigned char *sendbuffer,int len,int waittime);
各参数说明如下:函数功能:向USB 设备写入数据
pipenum: 所要操作的管道号,可以为1,3,5,7,9,11,13
recbuffer:发送数据缓冲区
len:发送数据缓冲区长度,必须为实际所要发送的数据长度,最大长度为1024 个字节
waittime:等待超时时间,为-1 表示一直等待
返回值:写入成功为发送的字节数,否则为-1


在LV中DLL配置如下
long WriteData(long pipenum, unsigned char *sendbuffer, long len, long waittime);

其中pipenum,len,long都是32位(4字节)有符号整型;
sendbuffer为8位无符号整型数组指针
调用的时候有初始化,但是运行后程序自动关闭,有经验的大哥指点一二

tx 发表于 2007-8-21 11:32:00

参数不对,或者是调用的方式有问题.

324zl 发表于 2007-8-24 15:14:19

参数配置一定要一样,包括名称和类型.
还有几个参数修改下,如下

为什么LabVIEW在调用我的LabVIEW DLL的时候会出现崩溃?

主要软件: LabVIEW Development Systems>>Full Development System
主要软件版本: N/A
主要软件修正版本: N/A
次要软件: N/A



问题: 我将LabVIEW的一个VI转换成了DLL,在我创建完这个DLL之后,我尝试从一个新的LabVIEW VI中去掉用它,但是在Call Library Function Node导致LabVIEW崩溃。我该如何修复它?

解答: 在从LabVIEW中调用LabVIEW创建的DLL的时候,有两件事情您需要检查一下:
确保DLL函数调用方法和您在Call Library Function配置对话框中选的是一致。如果您不选择其他的话,LabVIEW默认情况下使用C的调用方法给LabVIEW的DLL调用。在Windows中,您也可以选择标准的调用方法。在其他的操作系统里,只有C的调用方法是允许的,所以不存在这个问题。 一个调用方法不正确的现象是,在函数运行的时候,在程序框图里Call Function Library函数返回的时候会引起LabVIEW崩溃。
如果您正在显示LabVIEW DLL的前面板,有两条严格的要求确保它能够工作。
Call Library Function调用的DLL必须设置成Reentrant。在执行分类(在浏览按钮下面)将Run in UI Thread 设置成 Reentrant。
在调用VI里(LabVIEW开发环境里调用LabVIEW创建的DLL的那个VI)必须不能设置成用户接口执行系统。您可以在File » VI Properties » Execution中检查,并确保执行系统是标准的,仪器i/o,数据采集,其他的1,或者2(如果上层调用这个VI的VI是执行在用户接口系统的话,对于调用者也要这么设置)。

rongcheng0501@1 发表于 2007-8-24 15:37:21

你试一下用STDCALL规范调用,不要用C规范

jidiguxing 发表于 2007-8-25 08:34:38

rongcheng0501@1 所说是正解,谢谢,问题已经解决
页: [1]
查看完整版本: 帮忙看一下,USB调用的DLL问题出在那里?