调用我的DLL为什么会导致LabVIEW崩溃?

硬件: PXI/CompactPCI>>Controllers

问题: 当我使用调用库函数节点调用我的DLL时,LabVIEW崩溃了,会是由于什么原因?

解答: 有一些不同的可能原因会导致LabVIEW在调用dll函数的时候崩溃:

  • 确认您选择了和DLL相同的调用规范
    使用C调用规范时,调用方负责清空堆栈。使用标准调用规范时,被调用函数负责清空堆栈。如果调用方 (LabVIEW) 和被调用的DLL 函数不使用相同的调用规范,那会出现:要么它们都将数据移出堆栈或者它们都不清空堆栈。任意一种情况会在被调用函数返回的时候导致 LabVIEW崩溃。调用规范在调用函数节点窗口的右下角设置,参见下图。
  • 确认您连接了调用函数节点的所有输入输出
    如果您不连接输入,DLL函数会覆盖没有被分配的内存。如果您不连接输出,LabVIEW假定DLL函数不需要输入端传入的已分配内存空间,并把这些空间用于其他用途。然后,DLL函数会覆盖被保留的LabVIEW内存空间,导致LabVIEW崩溃。
  • 确认DLL函数没有覆盖LabVIEW内存
    许多DLL函数需要使用由指针或者值传递的被分配的内存, 写入这些内存并返回。如果没有分配足够的内存空间或者DLL写入了比分配的大小更多的数据,DLL会覆盖保留的LabVIEW内存空间并且导致LabVIEW崩溃。比如说,考虑如下函数:

    double *Waveform (double *waveform, uInt32 size);

    在这个例子中,合适的分配内存的方法是用合适的维数大小参数初始化数组,而不是传递一个空的数组。下图列举了一个合适的方法。

  • 确认LabVIEW使用了正确的数据类型像函数传递参数
    在LabVIEW中使用不正确的参数数据类型(值,参考,句柄,等)调用DLL函数会导致函数意外的指向不正确的内存位置,从而导致数据错误,或者甚至导致LabVIEW或者Windows的崩溃。
  • 如果您在LabVIEW中生成了DLL并且您想要显示DLL VI的前面板,您必须遵照两个必要条件。
    • 调用函数节点必须被设置,使调用DLL可以在任何线程运行。这通过更改线程单选按钮从在UI线程中运行在任何线程中运行
    • 调用的VI不能在用户界面线程中运行。这可以通过This can be checked by selecting从下拉菜单中选择 文件»VI 属性,在 类别列表中选择执行,确认首选执行系统是标准,仪器I/O,数据采集,其他1或者其他2。不能选择与调用方相同选项,因为这样的话父VI可能运行在用户界面线程下。

    如果需要完整的关于在LabVIEW 7.1或更早版本上使用其他编程语言的文档,请参考 Using External Code in LabVIEW 手册 (下文附有链接)。在LabVIEW 8.0或者以后的版本上,参考LabVIEW帮助中内容列表,基础»调用以文本编程语言编写的代码(下文附有链接)查找更多的信息。

  • LabVIEW 直到关闭时才崩溃
    最可能的问题是被调用的DLL函数破坏了内存空间。如果您向DLL传递数组和字符串,DLL函数不能动态更改数组大小。写入超过数组或字符串最后一个元素可能会破坏内存,并且这个问题可能只有在LabVIEW被关闭后才会显现出来。
  • 函数可能自己The function call itself does something illegal
    如果函数企图做一些不合法的操作,它也会导致LabVIEW崩溃。如果您不是函数的编写者,联系编写函数的程序员。

转载于:https://www.cnblogs.com/gaoshanxiaolu/archive/2012/11/16/2773675.html

labview dll 崩溃相关推荐

  1. labview linux 内核 不匹配,Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。...

    Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃. 我安装了LabVIEW pro 2017 for Linux ...

  2. ​​​LabVIEW DLL传递一个二维数组报错

    ​​​LabVIEW DLL传递一个二维数组报错 当调用一个LabVIEW DLL时,首先需要声明处理程序变量并将其初始化为NULL,比如,在C中,代码如下所示: main() { /* Labvie ...

  3. kernelbase.dll崩溃的处理_kernelbase.dll故障教程

    kernelbase.dll是存放在windows系统下的一个非常重要的dll文件.DLL英文全称Dynamic Link Library,中文意思是:动态链接库.DLL是一个作为共享函数库的可执行文 ...

  4. 在控制台环境下调用MFC DLL崩溃的问题小结

    使用MFC编写的DLL在MFC的程序中调用是没有任何问题的,但是如果在控制台环境下调用会出现崩溃的情况.解决方法如下,在MFC编写的DLL中添加下面一段代码,即可解决该问题: static AFX_M ...

  5. 《古墓丽影8》游戏时atiumdag.dll 崩溃解决方法

    最近玩<古墓丽影8>时经常出现一个错误,在事件查看器里有如下内容: Faulting application name: tru.exe, version: 1.0.0.0, time s ...

  6. LabVIEW崩溃后如何排查故障

    LabVIEW崩溃后如何排查故障 解决方案 LabVIEW内部错误和崩溃的初步故障排除步骤: 通过LabVIEW Crash Reporter对话框将崩溃报告发送给北京瀚文网星.添加任何有助于北京瀚文 ...

  7. 《DLL木马进程内幕大揭秘》

    如果是位经常玩"马马"的朋友,那么一般情况下都会或多或少掌握一些木马的特性,然而,很多朋友还是不知道"DLL木马"是什么东东.那到底什么是"DLL木马 ...

  8. kernel32.dll出错解决方案

    kernel32.dll 一.什么是kernel32内核文件 kernel32.dll是Windows 9x/Me中非常重要的32位动态链接库文件,属于内核级文件.它控制着系统的内存管理.数据的输入输 ...

  9. DEBUG pyqt + ntdll.dll + 随机异常退出

    最近在开发一自动控制的软件,需要实时刷新曲线图,打包部署发现程序会随机崩溃,最艹的是还让部署的那台工控机上另一自控软件崩溃的频率增加了. 于是定位问题,看windows的应用程序日志发现每次崩溃都指向 ...

最新文章

  1. Gut:粪便病毒组移植减轻2型糖尿病和肥胖症模型小鼠的相关症状
  2. WebSocket 网页聊天室的实现(服务器端:.net + windows服务,前端:Html5)
  3. git项目比对_Git实战之Git对比SVN
  4. 关于SQL Server中索引使用及维护简介
  5. php中的isset函数和empty函数
  6. [ASP.NET Core 2.0 前方速报].NET Core 2.0.3 已经支持引用第三方程序集了
  7. C++——二进制输出一个数以及输出double型位数过多情况
  8. 个人博客网站的设计与实现_基于BIS的网站建设的设计与实现
  9. 【Codeforces 851D Arpa and a list of numbers】
  10. mac 安装homebrew 并替换清华镜像
  11. lisp 车位块自动编号_湘源控规用使用手册.doc
  12. H26x 编解码 - GOP 模式
  13. quartus13.0用原理图输入法设计8位全加器
  14. flashfxp搜索服务器文件夹,FlashFXP 命令行参数
  15. C语言编程练习题_02兰州烧饼
  16. 大二Web课程设计——动漫海贼王(可以很好的应付老师的作业)
  17. 计算机横向查找,Excel查找引用函数:HLOOKUP查找首行并显示指定的值-excel技巧-电脑技巧收藏家...
  18. redux及react-redux
  19. big5转utf-8乱码解决方案
  20. cad和php哪个工资高,CAD顶级绘图员必备,人手一份的绘图命令,学会工资上万不是梦...

热门文章

  1. 压缩之后神经网络忘记了什么?Google研究员给出了答案
  2. 北亚利桑那大学等推出:航拍森林火情检测数据集 FLAME
  3. 2020年度中国人工智能学会优秀博士学位论文获奖名单正式出炉
  4. linux密码过期不修改,Linux解决用户密码过期但不用修改密码的方法
  5. linux whois工具,Linux whois命令
  6. 免费公开课 | 强化学习及其在竞速无人机中的应用
  7. ArcGIS学习路线
  8. 前端实现街道地图_使用百度地图实现地图网格的示例_白峰_前端开发者
  9. 阅读邮件回复邮件计算机操作题,一级计算机操作题步骤——Outlook Express操作.docx...
  10. Datax-web 使用Python3 执行脚本