当前位置: 首页 > news >正文

VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库

前面说的Delphi通过Activex DLL同时调用PowerBasic和FreeBasic写的DLL,是在WINDOWS基础平台上完成的。 而 .NET平台是架在WINDOWS基础平台之上的,它的上面VB.NET或C#等开发的APP程序,下面写一下用VB.NET,通过VB6注册的Activex DLL公共对象COM,调用PowerBasic和FreeBasic写的DLL实现,核心功能是MKI/CVI MKL/CVL MKS/CVS MKD/CVD的IEEE浮点计算。它们在一些传统产业上还在应用,而且一时半时也不会弃之不用。

 先创建新项目

 往下翻,找到VB窗体项目,中途大多是C#移动开发。

 在项目菜单中选填加引用

 确认后加到依赖项下

 在窗体上摆一些控件,和VB6设计时的界面内容差不多。

 在程序的最上部把注册的COM引用进来

 在Command1下写代码

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.ClickDim s As MBFIEEECRC = New MBFIEEECRCTextBox11.Text = "VERSION" : TextBox1.Text = s.ModbusRoutines(PBFB:=1, commandno:=10, commandval:=TextBox11.Text)TextBox11.Text = "AUTHOR" : TextBox10.Text = s.ModbusRoutines(PBFB:=1, commandno:=10, commandval:=TextBox11.Text)TextBox2.Text = s.ModbusRoutines(PBFB:=1, commandno:=1, commandval:="1123.21")      'MKITextBox9.Text = s.ModbusRoutines(PBFB:=1, commandno:=5, commandval:=TextBox2.Text)  'CVITextBox3.Text = s.ModbusRoutines(PBFB:=1, commandno:=2, commandval:="1123.21")      'MKLTextBox8.Text = s.ModbusRoutines(PBFB:=1, commandno:=6, commandval:=TextBox3.Text)  'CVLTextBox4.Text = s.ModbusRoutines(PBFB:=1, commandno:=3, commandval:="1123.21")      'MKSTextBox7.Text = s.ModbusRoutines(PBFB:=1, commandno:=7, commandval:=TextBox4.Text)  'CVSTextBox5.Text = s.ModbusRoutines(PBFB:=1, commandno:=4, commandval:="1123.21")      'MKDTextBox6.Text = s.ModbusRoutines(PBFB:=1, commandno:=8, commandval:=TextBox5.Text)  'CVDEnd Sub

MBFIEEECRC是COM的对外接口,把它NEW一个出来就可以用了,用法和VB6开发差不多一样的,调用函数ModbusRoutines时参数写至里面,有一个地方留心一点。

 入口参数是字符串时,先所它放到文本框中再将文本框中的TEXT作为参数使用,不宜直接将字符串作为参数传给COM,因为表面看上去无差别,但存储方式是有差异的,DLL间传送字符串时比较好的解决办法是先放到文本框,再送出文本框内容,在写COM时也如些处理一下,能免去调用时莫明其妙地异常退出。

 编译时选用x86模式,因为COM是线程内x32的。如果选了x64模式,编译通不能运行,找不到COM中的函数。正确编译后在x86的debug文件夹下生成可执行文件,同时把VB6的创建的那些DLL考贝进来。

双击WinFormsApp1.exe即可运行,点Command1执行,结果就出来了。

VS2022版的项目文件于下面的链接中

https://download.csdn.net/download/weixin_45707491/88244514

http://www.lryc.cn/news/137383.html

相关文章:

  • 怎样不引入图片实现前端css实现x关闭按钮
  • SpringBoot实现文件下载的多种方式
  • uniapp简单版语音播放
  • 前端三剑客入门一文解决
  • php curl apache 超时 500错误
  • ValueError: too many values to unpack (expected 4)
  • 学习Vue过程中遇到的问题汇总
  • cloud_mall-notes03
  • Redis注入中出现的问题
  • 机器学习实战之模型的解释性:Scikit-Learn的SHAP和LIME库详解
  • 【网络安全】防火墙知识点全面图解(二)
  • 【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(8 月 14 日论文合集)
  • 自学设计模式(类图、设计原则、单例模式 - 饿汉/懒汉)
  • python爬虫10:selenium库
  • c++ java rgb与nv21互转
  • 多视图聚类(multi-view clustering)简介
  • wazhu配置以及漏洞复现
  • javaweb项目部署linux服务器遇到的问题
  • 【数据结构OJ题】环形链表
  • PySpark-核心编程
  • vue 在IOS移动端中 windon.open 等跳转外部链接后,返回不触发vue生命周期、mounted等相关事件-解决方法
  • 股票预测和使用LSTM(长期-短期-记忆)的预测
  • Docker搭建个人网盘、私有仓库
  • 3种获取OpenStreetMap数据的方法【OSM】
  • 数据处理与统计分析——MySQL与SQL
  • OpenCV之特征点匹配
  • 浅谈开关柜绝缘状态检测与故障诊断
  • Mybatis 动态 SQL
  • Android studio之 build.gradle配置
  • 【ElasticSearch】一键安装IK分词器无需其他操作