背景:最近想提升下测试设备的方面的能力,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文件,增加程序框架的强壮性相关推荐

  1. java调用第三方dll文件 源码_C++调用python文件(包含第三方库)

    本文内容主要参考以下两篇文章: 武军:C++中调用python(VS2017)​zhuanlan.zhihu.com C++调用python的那些坑(详细教程步骤)_giser_xupf的博客-CSD ...

  2. C#调用Matlab2018 dll文件-快速傅里叶变换

    C#调用Matlab2018 dll文件-快速傅里叶变换 目标:C#调用Matlab生成的dll文件(动态链接库):以matlab的fft函数为例,C#内生成两列数组,作为输入复数数组的实部和虚部,对 ...

  3. 工控机的io开发_C#调用工控机dll文件,实现对IO的控制

    本文旨在记录,C#通过调用外部DLL文件实现对Nuvo3120工控机IO口的控制. 前期,了解了C++中.c\.h\.lib文件的区别,以及用这些文件生成DLL的方法,后面通过厂家直接找到了WDT_D ...

  4. 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的类库 类库 ...

  5. 制作和unity调用动态链接库dll文件

    首先用vc建立一个dll工程 然后在里面建立一个testunity.h文件.内容如下 1 extern "C" int _declspec(dllexport)testunity( ...

  6. dll放在unity哪个文件夹下_unity调用C#dll文件

    <一>.创建dll文件 1,打开vs文件->新建-> 项目->C#->类库,输入项目的名称,创建一个dll项目; 2,引入 UnityEngine UnityEdi ...

  7. linux下Qt调用C++库文件(.so)程序实现

    文章目录 主要内容 一.编程环境及实现方法 二.项目实现 1.创建项目 2.导入库文件 三.项目中遇到的问题 总结 主要内容 如标题所示,在linux下使用qtcreator创建项目调用C++库文件, ...

  8. php 调用vs2013 dll文件,VScode能编辑DLL库文件么

    我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦的是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果. 本文将通过一个实例来演示:如何完成一个简单的修改. ...

  9. ikvm java转换成dll_利用IKVM.NET将Java jar包转换成可供C#调用的dll文件

    C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...

最新文章

  1. MySql - 索引
  2. 网络编程应用:基于TCP协议【实现一个聊天程序】
  3. 这是一篇Markdown手册
  4. 音视频技术开发周刊 58期
  5. 前端开发 2018 回顾
  6. 孔浩Maven视频教程
  7. lumia 1520Android刷机包,诺言基亚Lumia 1520官方体系破开格提升固件释出产
  8. 数字化营销的意义所在
  9. Zemax操作--2(单透镜和双胶合透镜优化)
  10. 织梦后台登陆不上提示验证码不正确
  11. 学习是一件很辛苦的事,全世界都一样!
  12. 通过get和post访问HTTP接口的方法
  13. ASP.NET EXCEL导入,身份证、手机号长度校验数据校验
  14. maven snapshot和release版本的区别
  15. 实现图片从远到近css,如何利用景深效果,使图片近大远小,我的demo怎么是近小远大,代码如下:...
  16. 【开源教程11】疯壳·开源蓝牙心率防水运动手环-整机功能代码讲解
  17. 企业局域网管理软件_为何要进行内部局域网管理
  18. 简单易懂ppi和dpi的本质和由来
  19. Lambda Expression
  20. 8.14 早间行情分析和操作建议 昨晚一波多头拉伸后 空头顺势反压

热门文章

  1. SQLyog 64位破解版 v12.09中文注册版
  2. win10 自带的远程桌面连接怎么用?
  3. mcpc2017 Honey Heist (模拟)
  4. 解决执行go mod tidy时报错的问题:dial tcp: lookup xxx: no such host
  5. 为什么要最大化后验概率
  6. VAO, VBO, EBO的创建顺序和解绑顺序
  7. 【渝粤教育】国家开放大学2019年春季 1312学前教育原理 参考试题
  8. 如何克服上台演讲时紧张情绪
  9. Android中删除常用联系人(上)
  10. 数据采集与管理【15】