c#脚本实现-CS-ScriP,支持脚本调用第三方dll文件,增加程序框架的强壮性
背景:最近想提升下测试设备的方面的能力,yan测试设备的软件平台,前期朋友C#开发的,所有背景:
最近想提升下测试设备方面的知识及能力,研究下测试平台软件的开发,为了增加软件可扩展的强壮性,脚本是不错的选择,上个文章整理了Python的调用,c++封装dll调用能力有限搞不定,第三方脚本引擎对脚本中的第三方库支持不好,最后采用了调用Python.exe,通过控制台传递参数和结果,功能实现没有问题,但是发现速度慢,用台式机执行200ms,用笔记本更慢,如果有一半多个脚本执行预计会耗费大量时间,最后考虑既然界面用c#,脚本是否也可以呢,搞了几个晚上,刚开始,脚本汇总不包含第三方dll没有问题,但是既然做脚本就是为了通过第三方库增加强壮性,网上基本没介绍的资料,最后通过研究代码终于实现,且运行效率远高于上面文章调用Python的方案,后面上干货:
1、准备脚本引擎 CS-ScriP:由于我框架视觉部分用的.net4.5,所以尝试了兼容的版本,通过VS2015在NUget里面,搜索,同时发现低版本的比高版本的效率高很多,最后选择3.1.192.
2、另外为了能在脚本里面用dll,需要在调用的时候提前加载在脚本引擎,否则回报找不到库;我以Mobus库为例,此处是干货,网上没有资料,搞了高就才弄明白的,实现的,拿走不谢
3.直接上代码
脚本文件,放在EXE同级目录下,不用绝对路径
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NModbus;
using System.Net.Sockets;class HelloWorld
{public ModbusFactory modbusFactory;public IModbusMaster master;public TcpClient tcpClient;public string SayHello(){return "Hello World, from script!";}public string readmob (){try{modbusFactory = new ModbusFactory();tcpClient = new TcpClient("127.0.0.1", 502);master = modbusFactory.CreateMaster(tcpClient);master.Transport.ReadTimeout = 2000;master.Transport.Retries = 10;string str = master.ReadCoils(1, 101, 1)[0].ToString();if (master.ReadCoils(1, 100, 1)[0]){ master.WriteSingleCoil(1, 100, false ); }else{ master.WriteSingleCoil(1, 100, true); }master.Dispose();tcpClient.Close();return str;}catch (Exception e1){return "error";}}}
4、主程序,通过 按钮调用,按钮事件代码入下
private void button2_Click(object sender, EventArgs e){CSScript.Evaluator.ReferenceAssembly("NModbus.dll");//加载脚本用的dll文件,保证调用的时候不出错误// CSScript. EvaluatorConfig.Engine = EvaluatorEngine.Roslyn;dynamic hello = CSScript.Evaluator.LoadFile("HelloWorld.cs");// HelloWorld hello = new HelloWorld();// hello.SayHello();textBox4.Text = hello.readmob();}
最后上传资源https://download.csdn.net/download/junyao1987/19484604
c#脚本实现-CS-ScriP,支持脚本调用第三方dll文件,增加程序框架的强壮性相关推荐
- java调用第三方dll文件 源码_C++调用python文件(包含第三方库)
本文内容主要参考以下两篇文章: 武军:C++中调用python(VS2017)zhuanlan.zhihu.com C++调用python的那些坑(详细教程步骤)_giser_xupf的博客-CSD ...
- C#调用Matlab2018 dll文件-快速傅里叶变换
C#调用Matlab2018 dll文件-快速傅里叶变换 目标:C#调用Matlab生成的dll文件(动态链接库):以matlab的fft函数为例,C#内生成两列数组,作为输入复数数组的实部和虚部,对 ...
- 工控机的io开发_C#调用工控机dll文件,实现对IO的控制
本文旨在记录,C#通过调用外部DLL文件实现对Nuvo3120工控机IO口的控制. 前期,了解了C++中.c\.h\.lib文件的区别,以及用这些文件生成DLL的方法,后面通过厂家直接找到了WDT_D ...
- WindowsServer2019下Php(php-7.4.3-Win32-vc15-x64) 调用C# .dll文件
WindowsServer2019下Php(php-7.4.3-Win32-vc15-x64) 调用C# .dll文件 生成.dll 类库选择:在VS2019中选择,这个是不包含.core的类库 类库 ...
- 制作和unity调用动态链接库dll文件
首先用vc建立一个dll工程 然后在里面建立一个testunity.h文件.内容如下 1 extern "C" int _declspec(dllexport)testunity( ...
- dll放在unity哪个文件夹下_unity调用C#dll文件
<一>.创建dll文件 1,打开vs文件->新建-> 项目->C#->类库,输入项目的名称,创建一个dll项目; 2,引入 UnityEngine UnityEdi ...
- linux下Qt调用C++库文件(.so)程序实现
文章目录 主要内容 一.编程环境及实现方法 二.项目实现 1.创建项目 2.导入库文件 三.项目中遇到的问题 总结 主要内容 如标题所示,在linux下使用qtcreator创建项目调用C++库文件, ...
- php 调用vs2013 dll文件,VScode能编辑DLL库文件么
我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦的是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果. 本文将通过一个实例来演示:如何完成一个简单的修改. ...
- ikvm java转换成dll_利用IKVM.NET将Java jar包转换成可供C#调用的dll文件
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
最新文章
- MySql - 索引
- 网络编程应用:基于TCP协议【实现一个聊天程序】
- 这是一篇Markdown手册
- 音视频技术开发周刊 58期
- 前端开发 2018 回顾
- 孔浩Maven视频教程
- lumia 1520Android刷机包,诺言基亚Lumia 1520官方体系破开格提升固件释出产
- 数字化营销的意义所在
- Zemax操作--2(单透镜和双胶合透镜优化)
- 织梦后台登陆不上提示验证码不正确
- 学习是一件很辛苦的事,全世界都一样!
- 通过get和post访问HTTP接口的方法
- ASP.NET EXCEL导入,身份证、手机号长度校验数据校验
- maven snapshot和release版本的区别
- 实现图片从远到近css,如何利用景深效果,使图片近大远小,我的demo怎么是近小远大,代码如下:...
- 【开源教程11】疯壳·开源蓝牙心率防水运动手环-整机功能代码讲解
- 企业局域网管理软件_为何要进行内部局域网管理
- 简单易懂ppi和dpi的本质和由来
- Lambda Expression
- 8.14 早间行情分析和操作建议 昨晚一波多头拉伸后 空头顺势反压