调用外部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 功能准备的工程。
三 编辑模板并生成dll
无论外部库是 dll 还是 lib,或者两者均有,都可以在模板工程中被调用。需要注意的是,为了能够使得 tsmaster 能够正常识别,用户在准备模板工程过程中,除了实现自己的逻辑外,还需要提供函数的注释,参数说明等信息。具体方法可以打开默认模板文件,在全局搜索 fun1 关键字,该函数为一个示例函数,它出现的地方,也就是用户需要添加自定义内容的地方。
如上图所示,可以看到在 mplibcode.cpp 文件中,实现了 fun1 函数的声明和实现,在 mplibcodeextern.cpp 文 件 中 , 向 dll 管 理 模 板 注 册 了 函 数 fun1 的 存 在 , 在 tsmasterbasesource.cpp 文件中,向 dll 管理模板注册了 fun1 函数的相关参数信息。
在集成 tdms 功能过程中,首先需要将编译过程需要的 h 文件和 lib 文件拷贝到工程目录下,并在工程链接器中将 lib 文件作为输入。对于外部函数,例如 tdms 库自带的ddc_createfile 函数,在模板中使用一个新的函数进行封装,将其命名为 tdms_createfile。尽管 lib 文件的函数可以直接导出,但通常建议新建一个函数对它进行封装,一是可以统一函数的名称,便于用户区分,而是所有 api 的函数返回值必须为 int 类型,如果原生外部库不是该返回类型,则必须通过传递指针等方式获取返回值,此时必须通过封装的形式使用。
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,即可正确载入。
打开示例工程“tdms_example\tdms_example”,在测试系统的第一条用例,为 tdms文件生成测试代码。用户也可以新建小程序来调用,两者在操作上没有区别,都需先在属性窗口中,勾选所需外部库,然后在脚本程序中调用所需函数。如下图所示,脚本运行后会在 d 盘根目录下创建一个示例 tdms 文件。
直接运行该脚本,可以发现程序能够运行但并未按需创建 tdms 文件,通过运行记录文件查看错误消息,可以看到提示未能打开存储设备。这个问题是 tdms 库所特有的,因为它的依赖文件中,除了 dll 外,还包含一个名为 datamodels 的文件夹,tsmaster 在使用“tdms_example\plugins\dependencies”目录下的依赖文件时,不会对文件夹进行关联,因此需要手动把该文件夹复制到 tsmaster 安装程序目录,例如“c:\programfiles(x86)\tosun\tsmaster\bin”。有些外部库只有 dll 依赖,则不需要手动复制操作。
解决依赖的文件夹后,即可正确生成 tdms 文件。用户可以参考以上过程,实现自己的逻辑。整个过程需要对 visual stuido 环境具备一定了解,如有不清楚的地方,请参考示例工程。
五 在tsmaster中调试模板dll
在使用模板 dll 过程中,不可避免存在调试过程。用户可以修改模板 visual stuido 中项目属性->常规->输出目录,将 dll 的目录输出到调试使用的工程中“mplibrary”目录下。例如将“tdms_example”示例中 dll 生成到“tdms_example\tdms_example\mplibrary”下,然后先运行 tsmaster 工程,再启动 visual stuido 调试功能。调试过程与小程序调试方法一致,可以参考小程序的调试过程。
为什么pin实验前后的RCL差值超出了10%?
基于二维轮廓图形的参数化设计方法(CAXA电子图板软件)
三相电压不平衡产生原因/危害/措施
华为开发者大会2023亮点云集 见证鸿蒙生态发展强劲势头
华为MatePad pro平板的拆解及组件发布详解
如何使用TSMaster调用外部DLL/LIB程序
农用自动供水器电路图(1)
编辑视点:Intel与NVIDIA的“核”战争
IDS与防火墙对比
关于征集新材料产业智库专家的通知
2020年5G核心标准R16预计定案解读
台积电崛起的关键一役
荣耀9什么时候上市?荣耀9最新消息:强力黑白双摄加持!华为荣耀9新机堪称颜值担当!
如何去解决人工智能的大烦恼
120W氮化镓充电器拆解对比:看国产芯片如何征服大厂
新建一个PCB工程的正确步骤
土壤肥料速测仪是什么,它的功能都有哪些
物联网金融和现代农业之间存在什么联系
关于防水数码相机声学防水透气膜解决方案的介绍
日企手握现金4.8万亿美元舍不得花,在得意以后要哭?