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

    文章

    113

    浏览量

    45016
收藏 人收藏

    评论

    相关推荐

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

    逻辑操作体验。本文将详细介绍如何在虹科PE6中高效调用dll,包括如何加载和使用dll文件,以及如何创建自定义的dll项目。
    的头像 发表于 04-19 10:36 135次阅读
    虹科干货丨轻松掌握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 78次阅读
    在<b class='flag-5'>TSMaster</b>中加载基于DotNet平台的Seed&amp;amp;Key

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

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

    LabVIEW调用库函数节点无法显示DLL中的函数

    LabVIEW调用库函数节点无法显示DLL中的函数 正在使用调用库函数节点来调用一个DLL文件。可是,当浏览该
    发表于 11-09 19:08

    一分钟带你了解TSMaster程序编辑代码智能提示功能

    本文给大家带来TSMaster程序编辑的新功能,其中主要包含:代码编辑智能提示功能、可用外部代码编辑器编辑小程序代码并同步。本文关键字:C小程序
    的头像 发表于 10-28 08:22 1218次阅读
    一分钟带你了解<b class='flag-5'>TSMaster</b>小<b class='flag-5'>程序</b>编辑代码智能提示功能

    RA2基于e2 studio环境下实现LIB的生成与调用

    在产品研发过程中,我们一般接触最多的程序文件就是.c和.h为后缀名的文件,但在某些场景下,也需要使用LIB库的方式进行开发。LIB库的应用适应于以下几个场景:我们针对行业产品开发了方案,初期作为方案
    的头像 发表于 09-15 12:18 673次阅读
    RA2基于e2 studio环境下实现<b class='flag-5'>LIB</b>的生成与<b class='flag-5'>调用</b>

    LabVIEW调用康耐视Vision Pro dll

    LabVIEW调用康耐视Vision Pro dll,直接调用CogToolBlock
    发表于 09-08 15:07

    LabVIEW调用C#编写的.NET类库

    本文主要是LabVIEW无法调用回调函数dll的问题的解决方法,也介绍了LabVIEW调用C#库的方法。
    的头像 发表于 09-06 17:43 3608次阅读
    LabVIEW<b class='flag-5'>调用</b>C#编写的.NET类库

    一文了解TSMaster中Seed和key的两种处理方法

    TSMaster的编译器中直接添加安全算法。一加载外部Seed&KeyDLLTSMaster诊断模块支持通过dll载入Seed&Key算法,该算法dll跟主流工具的计算接口兼容,接口
    的头像 发表于 08-26 08:23 789次阅读
    一文了解<b class='flag-5'>TSMaster</b>中Seed和key的两种处理方法

    TSMaster小功能—Python小程序如何导入外部

    今天给大家介绍TSMaster功能之Python小程序如何导入外部库。通过在TSMaster默认的解析器路径下导入外部库来介绍,以便我们去使
    的头像 发表于 08-14 10:06 672次阅读
    <b class='flag-5'>TSMaster</b>小功能—Python小<b class='flag-5'>程序</b>如何导入<b class='flag-5'>外部</b>库

    DLL文件的创建和测试程序

    创建DLL有几种不同的方式,最简单直接的的方式就是通过VS自带的动态链接库(DLL)项目,把相关的功能封装成一个类,然后导出几个接口方法,编译成功以后生成DLL文件,就可以在其他地方跟正常的第三方库配置之后一样
    的头像 发表于 08-03 11:17 1125次阅读
    <b class='flag-5'>DLL</b>文件的创建和测试<b class='flag-5'>程序</b>

    vs+qt3编译的dll vs+qt5可以调用吗?

    我有一个老程序,是使用VS2013 + QT3.3.4开发的,开发了很多dll,现在我想用VS2013+QT5来修改它的用户界面部分,尽量不去改它的dll,因为太多dll了。想问一下大
    发表于 06-26 07:02

    干货分享 | TSMaster标定模块自动化控制应用指南

    “本文目录:一、TSMaster标定模块自动化控制的基础原理1.1TSMaster的标定系统变量1.2内部TSMaster调用C脚本实现标定模块的自动化控制1.3
    的头像 发表于 06-21 17:45 509次阅读
    干货分享 | <b class='flag-5'>TSMaster</b>标定模块自动化控制应用指南

    Java调用C/C++动态库dll操作串口实例

    大家好,今天分享的是使用C/C++编写一个读取串口数据的代码,然后将其编译成Windows下的动态链接库(.dll文件),然后写一个简单的java demo来调用C/C++接口。
    的头像 发表于 05-23 15:41 667次阅读
    Java<b class='flag-5'>调用</b>C/C++动态库<b class='flag-5'>dll</b>操作串口实例

    DLL简介

    DLL 文件就会被调用。一个应用程序可使用多个 DLL 文件,一个 DLL 文件也可能被不同的应用
    的头像 发表于 05-22 15:51 875次阅读
    <b class='flag-5'>DLL</b>简介