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

    文章

    115

    浏览量

    45376
收藏 人收藏

    评论

    相关推荐

    解决方案 | 基于TSMaster的平板电脑解决方案

    Tosun基于TSMaster的平板电脑解决方案基于TSMaster的平板电脑是一款集成了TSMaster软件平台和多种总线分析硬件工具的综合产品,旨在充分发挥同星自主研发的技术优势,解决实车路试
    的头像 发表于 11-10 01:02 552次阅读
    解决方案 | 基于<b class='flag-5'>TSMaster</b>的平板电脑解决方案

    干货分享 | TSMaster软件指南

    TSMaster是同星智能开发的一款国产汽车总线工具链软件平台,是全方位汽车总线设计、仿真、分析、诊断和标定的专业工具,支持从需求分析到系统实现的整个系统开发过程。TSMaster软件可连接、配置并
    的头像 发表于 09-15 08:08 1341次阅读
    干货分享 | <b class='flag-5'>TSMaster</b>软件指南

    虹科干货 轻松掌握PCAN-Explorer 6,dll调用一文打尽!

    的批量逻辑操作体验。本文将详细介绍如何在虹科PE6中高效调用dll,包括如何加载和使用dll文件,以及如何创建自定义的dll项目。 PE6与dll
    的头像 发表于 08-29 10:00 416次阅读
    虹科干货 轻松掌握PCAN-Explorer 6,<b class='flag-5'>dll</b><b class='flag-5'>调用</b>一文打尽!

    LabVIEW调用Aspose.dll实现excel读写、图片插入,

    。 这里分享一下使用labview如何调用Aspose.dll。labview程序见附件*附件:Aspose_LV_Excel_Read_Write V2.zip 读取excel表格: 写入单元格: 向单元格插入图片:
    发表于 06-24 17:01

    TSMaster 的 CAN UDS 诊断操作指南(下)

    上期,我们主要介绍了UDS诊断模块的创建以及TSMaster基础诊断配置。很多客户表示意犹未尽。因此我们将继续带来《TSMaster的CANUDS诊断操作指南(下)》的精彩内容,为您带来
    的头像 发表于 06-18 08:21 1616次阅读
    <b class='flag-5'>TSMaster</b> 的 CAN UDS 诊断操作指南(下)

    TSMaster 的 CAN UDS 诊断操作指南(上)

    TSMaster可以少代码甚至零代码就可以完成诊断流程开发,诊断开发人员只需要熟悉诊断流程,就能打通研发、产线、售后整条链路环节。TSMaster的UDS诊断功能不仅支持CAN,LIN,同时也支持
    的头像 发表于 06-08 08:21 2061次阅读
    <b class='flag-5'>TSMaster</b> 的 CAN UDS 诊断操作指南(上)

    TSMaster VLAN配置方法

    VLAN是虚拟局域网,利用VLAN,我们可以自由设计广播域的构成,同时提高网络设计的自由度。本文将介绍如何在TSMaster上配置VLAN信息,并结合TCP/IP通讯测试展开。本文关键字:VLAN
    的头像 发表于 05-18 08:21 436次阅读
    <b class='flag-5'>TSMaster</b> VLAN配置方法

    虹科干货丨轻松掌握PCAN-Explorer 6,dll调用一文打尽!

    逻辑操作体验。本文将详细介绍如何在虹科PE6中高效调用dll,包括如何加载和使用dll文件,以及如何创建自定义的dll项目。
    的头像 发表于 04-19 10:36 740次阅读
    虹科干货丨轻松掌握PCAN-Explorer 6,<b class='flag-5'>dll</b><b class='flag-5'>调用</b>一文打尽!

    TSMaster中加载基于DotNet平台的Seed&amp;amp;Key

    在UDS诊断过程中,会涉及到安全访问的问题,也就是所谓的Seed&Key。TSMaster诊断模块支持通过.dll文件载入Seed&Key算法用于安全访问解锁。在最近发布
    的头像 发表于 04-02 08:20 507次阅读
    在<b class='flag-5'>TSMaster</b>中加载基于DotNet平台的Seed&amp;amp;Key

    反射DLL注入的工作原理和实现流程

    在之前的文章中,通过模拟 Windows 映像加载程序的功能,完全从内存中加载 DLL 模块,而无需将 DLL 存储到磁盘上,但这只能从本地进程中加载进内存中,如果想要在目标进程中通过内存加载
    的头像 发表于 01-20 10:04 2142次阅读
    反射<b class='flag-5'>DLL</b>注入的工作原理和实现流程

    e² studio创建lib文件及使用

    e² studio创建lib文件及使用
    的头像 发表于 01-18 08:06 422次阅读
    e² studio创建<b class='flag-5'>lib</b>文件及使用

    Nuclei Studio IDE工具如何调用生成的lib库?

    创建2个工程: test工程:主工程,会调用libt_lib.a库 目前将t_lib工程生成的libt_lib.a直接拷贝到test工程的application/source目录下
    发表于 01-10 06:12

    DLL/PI的原理简述

    如果有准频率,但相位不准的时钟,那么常用DLL(delay loop lock)来锁定时钟的相位,而PI(phase interpolation)是DLL最重要的部分。
    的头像 发表于 12-15 15:14 937次阅读
    <b class='flag-5'>DLL</b>/PI的原理简述

    TSMaster程序启动和停止的自动化控制流程

    在实际应用场景中,用户常常需要按一定逻辑和时序来控制TSMaster内置功能模块的启动和停止,TSMaster软件内置有C/Python小程序和图形程序,开发者可以通过编程对这些模块的
    的头像 发表于 12-02 08:21 1221次阅读
    <b class='flag-5'>TSMaster</b>小<b class='flag-5'>程序</b>启动和停止的自动化控制流程

    python调用windows命令

    Windows命令,提供一些实际的示例和代码。 首先,我们需要了解一些基本概念。Windows命令是一种命令行界面(CLI),它允许用户通过键入命令来与操作系统进行交互。Python提供了一个名为 subprocess 的内置模块,它允许我们在Python程序中执行外部
    的头像 发表于 11-29 14:34 992次阅读