0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用TSMaster调用外部DLL/LIB程序

上海同星智能科技有限公司 2022-08-16 09:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

调用外部DLL/LIB程序

在用户自定义开发过程中,常常会遇到需要调用外部 DLL/LIB 程序文件的需求,这些文件可能是用户自己编写的,也可能是其它供应商提供的。TSMaster 支持调用外部二进制程序库,但必须通过一定的方法进行封装。本节内容以调用 NI 公司的 TDMS 文件记录程序为例,演示封装 DLL 库的方法,而 LIB 库的使用与 DLL 类似,用户可以在 visual studio工程中执行类似操作实现。

一 获取外部程序库

NI 公司的 TDMS 库可以通过此链接下载,对于外部库的使用,请注意以下限制:

1. 在下载外部程序库的过程中,请注意发布程序库的使用协议,同星公司仅提供外部程序库的使用环境,不为违反外部库使用协议的行为负责;

2. 外部库被 TSMaster 载入后,即成为了主程序的一部分,如果外部库发生了崩溃/内存溢出等行为,会导致 TSMaster 程序不稳定或崩溃,此时需要重新打开软件并卸载有问题的外部库;

3. TSMaster 仅支持 32bit-msvc 版本的外部库,请使用合适版本的 DLL/LIB 文件,否则会导致编译过程出错。

(在附件的“tdms_example\TDM C DLL”目录下,可以找到解压后的 TDMS 外部库相关文件。)

二 准备外部库调用模板

该模板可以从 TSMaster 程序中拷贝,通过 帮助->api 例程-> Mini Program SDK 目录下名为 VC++的工程,将该工程复制到其它用户自定义的位置备用即可。

在附件“tdms_example\tdms_sdk”可以看到为 TDMS 功能准备的工程。

f610462a-1af7-11ed-9ade-dac502259ad0.png

三 编辑模板并生成DLL

无论外部库是 DLL 还是 LIB,或者两者均有,都可以在模板工程中被调用。需要注意的是,为了能够使得 TSMaster 能够正常识别,用户在准备模板工程过程中,除了实现自己的逻辑外,还需要提供函数的注释,参数说明等信息。具体方法可以打开默认模板文件,在全局搜索 fun1 关键字,该函数为一个示例函数,它出现的地方,也就是用户需要添加自定义内容的地方。

f63a89ee-1af7-11ed-9ade-dac502259ad0.png

如上图所示,可以看到在 MPLibCode.cpp 文件中,实现了 fun1 函数的声明和实现,在 MPLibCodeExtern.cpp 文 件 中 , 向 dll 管 理 模 板 注 册 了 函 数 fun1 的 存 在 , 在 TSMasterBaseSource.cpp 文件中,向 dll 管理模板注册了 fun1 函数的相关参数信息。

在集成 TDMS 功能过程中,首先需要将编译过程需要的 h 文件和 lib 文件拷贝到工程目录下,并在工程链接器中将 LIB 文件作为输入。对于外部函数,例如 TDMS 库自带的DDC_CreateFile 函数,在模板中使用一个新的函数进行封装,将其命名为 tdms_CreateFile。尽管 LIB 文件的函数可以直接导出,但通常建议新建一个函数对它进行封装,一是可以统一函数的名称,便于用户区分,而是所有 API 的函数返回值必须为 int 类型,如果原生外部库不是该返回类型,则必须通过传递指针等方式获取返回值,此时必须通过封装的形式使用。

f66812b0-1af7-11ed-9ade-dac502259ad0.png

TDMS 其它的函数封装过程请参考示例工程,请务必注意封装函数代码和函数注册代码需要匹配,才能正确工作。基于该模板,在 Debug/Release-x86 模式下,可以生成所需的“tdms_sdk.dll”。

四 在TSMaster中调用模板DLL

为了在 TSMaster 中调用“tdms_sdk.dll”,可以将该 dll 直接拖入,或者通过仿真->小程序库->加载的方式载入,如下图所示,直接加载会失败,这是由于模板 dll 依赖了 TDMS运行时 DLL 文件,依赖文件在“tdms_example\TDM C DLL\dev\bin\32-bit”目录下,由 NI公司提供,将所有文件拷贝到 TSMaster 工程\Plugins\Dependencies 目录下(这个目录需要手动创建,默认 TSMaster 不会创建),再载入模板 dll,即可正确载入。

f6905180-1af7-11ed-9ade-dac502259ad0.png

打开示例工程“tdms_example\tdms_example”,在测试系统的第一条用例,为 TDMS文件生成测试代码。用户也可以新建小程序来调用,两者在操作上没有区别,都需先在属性窗口中,勾选所需外部库,然后在脚本程序中调用所需函数。如下图所示,脚本运行后会在 D 盘根目录下创建一个示例 TDMS 文件。

f6c610a4-1af7-11ed-9ade-dac502259ad0.png

直接运行该脚本,可以发现程序能够运行但并未按需创建 TDMS 文件,通过运行记录文件查看错误消息,可以看到提示未能打开存储设备。这个问题是 TDMS 库所特有的,因为它的依赖文件中,除了 dll 外,还包含一个名为 DataModels 的文件夹,TSMaster 在使用“tdms_example\Plugins\Dependencies”目录下的依赖文件时,不会对文件夹进行关联,因此需要手动把该文件夹复制到 TSMaster 安装程序目录,例如“C:\ProgramFiles(x86)\TOSUN\TSMaster\bin”。有些外部库只有 dll 依赖,则不需要手动复制操作。

f6fe3d9e-1af7-11ed-9ade-dac502259ad0.png

解决依赖的文件夹后,即可正确生成 TDMS 文件。用户可以参考以上过程,实现自己的逻辑。整个过程需要对 visual stuido 环境具备一定了解,如有不清楚的地方,请参考示例工程。

五 在TSMaster中调试模板DLL

在使用模板 dll 过程中,不可避免存在调试过程。用户可以修改模板 visual stuido 中项目属性->常规->输出目录,将 dll 的目录输出到调试使用的工程中“MPLibrary”目录下。例如将“tdms_example”示例中 dll 生成到“tdms_example\tdms_example\MPLibrary”下,然后先运行 TSMaster 工程,再启动 visual stuido 调试功能。调试过程与小程序调试方法一致,可以参考小程序的调试过程。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dll
    dll
    +关注

    关注

    0

    文章

    120

    浏览量

    46682
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    我用matlab的coder 封装了一个c语言的dll, 但是在用labview调用时,会出现识别不到库的问题,有大神遇到过吗

    我之前用coder编译过简单的加减法,调用没有问题: 但是后面封装了个复杂点的函数,就会出现问题,自己验证过,函数本身肯定是没问题的。 中间自己用matlab调用dll测试,也是没问题的,有大神指导怎么解决吗
    发表于 11-14 11:25

    软件更新 | TSMaster 9-10月版本发布:TAC脚本进阶,小程序易用性大幅提升

    为持续赋能用户的研发与测试工作,TSMaster正式发布2025年9-10月功能更新。本次版本聚焦于核心自动化能力的强化与用户体验的优化,重点带来了TAC脚本全面进阶、小程序易用性升级、API更新
    的头像 发表于 10-31 20:04 982次阅读
    软件更新 | <b class='flag-5'>TSMaster</b> 9-10月版本发布:TAC脚本进阶,小<b class='flag-5'>程序</b>易用性大幅提升

    关于LABVIEW 生成EXE后 动态调用外部VI的问题

    ADD.VI :是我需要调用的VI 应用程序.EXE :是我项目里面把 \"调用DLL.VI\" 生成的exe文件 我没有编译exe前去调用
    发表于 07-30 14:22

    告别摸索!TSMaster官方最全学习路径整理

    在汽车电子和总线通信领域,TSMaster已成为工程师们不可或缺的利器。作为一款功能强大的总线分析、仿真、测试和诊断工具,TSMaster广泛应用于CAN、LIN、FlexRay等总线系统的开发
    的头像 发表于 06-13 20:06 778次阅读
    告别摸索!<b class='flag-5'>TSMaster</b>官方最全学习路径整理

    EtherCAT运动控制卡应用开发教程之Java

    运动控制卡的Java开发及DLL调用
    的头像 发表于 06-13 14:29 634次阅读
    EtherCAT运动控制卡应用开发教程之Java

    部署计算机上运行 LabVIEW 应用程序时出现以下错误: “缺少外部函数 dll...”解决办法

    如果你既有 DLL 文件,也有头 (.h) 文件,那么可以使用共享库批量生成VI,不用再一个一个使用“调用库函数节点”来调用DLL,源代码运行是没有问题,一旦生成应用
    发表于 04-01 19:10

    干货分享 | TSMaster用户必看:以太网通信仿真用户手册

    在汽车电子开发中,以太网通信仿真已成为ECU测试、诊断和网络分析的关键环节。TSMaster作为一款强大的汽车电子仿真和测试工具,为工程师提供了高效的以太网通信解决方案。本手册将带您深入解析
    的头像 发表于 03-28 20:04 796次阅读
    干货分享 | <b class='flag-5'>TSMaster</b>用户必看:以太网通信仿真用户手册

    解锁TSMaster fifo函数:报文读取的高效方法

    入门》手册。1.技术背景TSMaster的小程序模块中提供了接收事件、发送事件以及预发送事件等回调事件,如图1。相比于回调函数,fifo函数使用起来比较灵活方便,可
    的头像 发表于 03-14 20:04 950次阅读
    解锁<b class='flag-5'>TSMaster</b> fifo函数:报文读取的高效方法

    有没有什么方案能实现直接用matlab或python调用D4100_usb.dll

    是32位程序而我的电脑是64位的。 由于实验中主要用matlab编程,使用C++程序很不方便,如果能直接用matlab或python调用D4100_usb.dll就会好很多。 因此,我
    发表于 02-27 06:59

    有没有64位的CyUSBSerial.dll和CyUSBSerial.lib,官方demo中都是32位的库,无法在64位程序中运行?

    有没有64位的CyUSBSerial.dll和CyUSBSerial.lib,官方demo中都是32位的库,无法在64位程序中运行
    发表于 02-21 08:15

    labview调用dll提示加载程序集时发生错误

    问题描述: 小弟在用构造器节点调用dll的时候提示加载程序集时发生错误,个人觉得可能是.net环境不匹配,还请各位大神支支招 问题图片如下图 dll描述如图
    发表于 02-19 10:46

    干货分享 | TSMaster AUTOSAR E2E使用说明

    在车载网络中,信息交换通常涉及多个电子控制单元(ECU)之间的通信。对于安全相关的信号,如车速、档位、车辆/电源模式等,数据的完整性和可靠性至关重要。TSMaster为用户开发了AUTOSARE2E
    的头像 发表于 02-14 20:07 1440次阅读
    干货分享 | <b class='flag-5'>TSMaster</b> AUTOSAR E2E使用说明

    AN-1138: LINB DLL编程指南

    电子发烧友网站提供《AN-1138: LINB DLL编程指南.pdf》资料免费下载
    发表于 01-13 14:28 0次下载
    AN-1138: LINB <b class='flag-5'>DLL</b>编程指南

    QT调用动态库开发IC卡读写程序

    块、第3块,每块16个字节,第3块是块,禁止在此存放数据。第0块、第1块、第2块可随意存放数据。但第0区的第0块已被固化了IC卡出厂信息,此块只能读出信息,不可更改。   调用DLL动态库代码
    的头像 发表于 12-30 09:25 922次阅读

    当matlabappdesigner打包成exe文件后,如何调用外部的函数.m程序

    当matlabappdesigner打包成exe文件后,如何调用外部的函数.m程序?我尝试了很多办法,包括 addpath,filread,eval等,都不可行,谁能帮帮我!
    发表于 12-29 18:50