LabVIEW调用动态链接

Call Library Node 是 LabVIEW 中调用 DLL 函数的节点。如果被调用的函数有一参数数据类型为 char*,用来输出字符串。我们需要在 CLN 中这个参数对应的左侧接线端连进一个字符串,并且输入字符串的长度要保证大于输出字符串的长度。这个输入字符串的内容是没有用的,它只被用作是被开辟的内存,保存输出字符串。否则,会出现数组越界的运行错误,LabVIEW会莫名其妙死掉。
    更糟糕的是,LabVIEW 不会在刚好出现数组越界错误时死掉,而是在之后的某一部确定时候死掉。如果你意识不到自己的程序中有这种错误,或者你有几百个类似的 CLN,那你调试起来可能会类似的。
 
    有人问我,如果函数不是用参数输出字符串而是返回字符串,CLN 返回参数是没有左接线端的。这可咋开辟内存捏?
    我打开 LabVIEW 一试,可不是嘛。函数返回字符串的地方根本没法输入任何信息。自己编了一个DLL试了试,发现 CLN 是可以正确输出函数返回的字符串的,不需要特别指定字符串的大小。
    今天早上起得太早,于是就有点发晕,心想,如果既然 LabVIEW 不需要为函数返回的字符串开辟内存,干嘛非要难为我们为参数输出的字符串开辟内存。否则可以避免多少潜在的错误啊。DLL 函数参数输出字符串是个比较常见的导致程序崩溃的陷阱。
 
    琢磨了半天,脑袋才清醒过来。所谓返回或输出字符串是口头上的语言。换成计算机的语言来解释就清楚了:)
    函数返回字符串的情况,实际上是函数返回了一个指向字符串指针。既然是函数返回的,LabVIEW就可以得到该指针,进而就可以得到它所指的字符串。在LabVIEW内部,调用以下 strlen() 得到字符串的长度,开辟一个相应大小的buffer,再调用以下 strcpy() 就把这个字符串考到 LabVIEW 控件的数据区了。
    而参数输出字符串的情况并不是真的输出,而是函数要求输入一个指针。LabVIEW 必须为DLL函数提供这样一个指针。而LabVIEW自己又不能自动开辟一片缓存就把指针传给函数,因为这时候我们想要的字符串还不存在呢,LabVIEW没办法知道应该开辟多大的缓存。只好把指定缓存大小的任务交给编程人员了:(
 
    LabVIEW 编程如果不是考虑调用C编出来的函数,根本不需要内存分配回收的问题。有了内存分配就是烦啊。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LabVIEW (Laboratory Virtual Instrument Engineering Workbench) 是一种图形化编程环境,主要用于数据采集、控制系统设计和实验自动化。在 LabVIEW 中,调用 DLL(Dynamic Link Library,动态链接库)是一项常见的任务,因为 DLL 可以包含预先编译好的函数,可以在多个程序中复用。 调用 DLL 动态库在 LabVIEW 中的步骤如下: 1. **添加库资源**: - 在 LabVIEW 工程中,你需要通过“工具”(或“菜单”>“文件”>“添加”>“文件”)将 DLL 文件添加到你的项目资源中。这会将 DLL 作为项目的组成部分。 2. **引用库**: - 通过“工具”>“引用”,在“类别”下选择“系统”或“第三方”(取决于DLL的类型),找到你刚刚添加的 DLL,并将其拖动到引用列表中。这样 LabVIEW 就知道如何访问库中的函数。 3. **调用函数**: - 在 LabVIEW 图形界面中,你可以使用“函数”图标(通常为一个小房子)或“脚本”结构来调用 DLL 中的函数。右键点击该图标,选择“添加函数”或“编辑属性”,输入 DLL 函数名和参数。 4. **处理返回值和错误**: - 函数调用后,可能需要处理返回值和错误代码。可以通过“常量”节点来检查函数的返回状态,并根据结果执行后续操作。 5. **处理回调**: - 如果 DLL 提供了回调函数,你可能需要创建一个子VI或者事件驱动的方法来处理这些事件。 6. **打包发布**: - 在准备好后,记得在生成 LabVIEW 应用的可执行文件时包含所需的 DLL,通常是将 DLL 放入同一个目录或指定的系统搜索路径中。 相关问题-- 1. 如何在 LabVIEW 中处理 DLL 依赖问题? 2. LabVIEW 中如何处理 DLL 函数的异常情况? 3. LabVIEW 调用 DLL 是否支持异步操作?如果需要,如何实现?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事如yan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值