labview调用DLL程序崩溃问题的解决

初学labview,最近学到调用DLL实现某些功能。

在编写完程序之后,多次出现在VI运行、以及关闭时程序崩溃,并且报错误码:0xC0000005。

调用DLL关闭程序时出现0xC0000005错误代码说明发生了内存访问冲突

搜寻资料出现这种情况解决的方案如下:

1.确保选择了和DLL相同的调用规范。是C还是stdcall,好像一般跨平台调用的DLL都是要选用stdcall,需要被调用函数来清除堆栈。

2.确保已经连接了调用库函数节点(Call Library Function Node)的所有输入和输出。

3.确保DLL函数不会覆写LabVIEW内存。如果足够的内存空间分配或DLL函数写入的内容超过分配的内存,DLL将覆写入剩余的LabVIEW内存空间并导致LabVIEW崩溃。所以需要在传值和读出DLL中的数组,字符串或波形之前确保正确分配内存。

4.确保LabVIEW使用了正确的数据类型像函数传递参数。我自己就犯了这个错误,labview的数据类型要和调用的DLL函数参数对应上,不然会在程序运行时就崩溃。对应的关系照搬书本好像还不是完全对,需结合实际,比如DLL函数输出参数类型为unsigned char ,事实上我需要的是这个字符对应的ASCLL值,所以labview可以在输出端接一个无符号8位数值类型显示控件。

5.函数调用本身就是非法的。如果某个函数试图执行非法操作,可能会导致LabVIEW崩溃。

6.如果LabVIEW在关闭之前不会崩溃(本人也遇到了这个问题)。最可能的问题是被调用的DLL函数已损坏内存。如果将数组或字符串传递给DLL,则DLL函数无法动态调整数组大小。在数组或字符串的最后一个元素之外写入可能会损坏内存,这在LabVIEW关闭之前可能并不明显。我将传入的一个空字符串常量替换成了一个数值,同时对DLL函数的输入输出参数也做了修改,程序在关闭时不会崩溃了(原因还没找到)。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值