VB.Net使用接口的问题

问题描述

目前的目标:在VB.net中使用第三方提供的dll和他们的硬件通过串口进行通讯现在第三方厂家提供了与他们硬件串口通讯的dll,他们提供的示例是在JScript写的如下所示:varreq:SYS_VERSION=newSYS_VERSION();ZEngine.Send("Device1",req);//将该请求发送给,“device1”的串口设备

在VB.net中添加提供的dll,来进行程序编写,声明好对象好,不清楚如何继续,代码如下所示:DimreadPanidReqAsNewZB_READ_CONFIGURATIONDimreadPanidInterfaceAsIREQUEST=CType(readPanidReq,IREQUEST)readPanidReq.ConfigId=&H1//MessageBox.Show(readPanidReq.ToString)

如何调用接口中的API,达到JScript中ZEngine.Send("Device1",req);的效果,即,如何将该请求数据发送给VB.net提供的串口(串口程序在网上有示例的代码)?下面是官方提供的说明文档截图:比较小白,基本处于无头绪状态,请大神们给指条明道,3q

解决方案

解决方案二:
这种情况,最优先的想法不应该是自己去调用。而是要求厂家给你个例子。电话沟通好过自己闷头干。非技术方式解决有时候成本比较低。
解决方案三:
引用1楼wuyazhe的回复:

这种情况,最优先的想法不应该是自己去调用。而是要求厂家给你个例子。电话沟通好过自己闷头干。非技术方式解决有时候成本比较低。

官方已经给出了JScript的demo(看到的应该有4-5个)并给处于JScript的环境,在他提供的JScript的环境中模仿着调用接口命令执行也正常;VB、C++等版本估计要开发者自己去完成,官方提供各版本Demo的可能性不大;另外,本人英文比较烂,跟人家沟通比较困难。现在要实现VB.net将命令发送串口设备执行,各类的变量有了,如何把请求通过串口send出去?望大神们指教
解决方案四:
另外在ZLL中可到一个和Send("Device1",req)比较近似的是否调用的方法的话,就类似这种?
解决方案五:
这个dll提供了哪些类,其中有send方法吗
解决方案六:
dll里面提供了串口的相关API
解决方案七:
下面代码是JScript的示例:ZEngine.add_OnMessageZPI2(this.MessageHandler);functionMessageHandler(zportName:String,id:MESSAGE_ID,msg:Object){}

在Dll中找到的相关类:
解决方案八:
处理消息类的handle:貌似自身水平,现在还不能把这些信息串起来有个demo的话可能会理解的快一些。
解决方案九:
ZEngine.Send("Device1",req);//将该请求发送给,“device1”的串口设备ZEngine是什么类型,在哪声明的
解决方案十:
谢谢回复ZEngine的描述如下图所示(在该厂家提供的编译环境里直接调用了):dll中看到一个send方法:请教个问题:论坛里怎么上传附件(把dll文件上传上来)?
解决方案十一:
6Lport中的方法,尝试着做如下操作:PublicClassForm1PublicOverridableSubInvoke(ByValsenderAsTI.ZPortLib.ZPort,ByValeAsTI.ZPortLib.MsgAvailEventArgs)EndSubPrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadDimreadPanidReqAsNewZB_READ_CONFIGURATIONDimreadPanidInterfaceAsIREQUEST=CType(readPanidReq,IREQUEST)readPanidReq.ConfigId=&H1MessageBox.Show(readPanidReq.ToString)DimmsgAvailEventArgsAsMsgAvailEventArgs'PublicSubNew(ByValmsgAsObject,ByValmsgIDAsTI.ZPI2.MESSAGE_ID)TI.ZPortLib.MsgAvailEventArgs(的成员)'如下使用时提示错误:构造函数调用仅作为实例构造函数中的第一条语句有效。msgAvailEventArgs.New(readPanidReq,MESSAGE_ID.ZB_READ_CONFIGURATION)DimcurrentComAsZPort'如下使用时提示错误:该类中Name为只读属性currentCom.Name="COM6"Invoke(currentCom,msgAvailEventArgs)EndSubEndClass

出现的问题如何消除,或者说怎么使用才正确?3q
解决方案十二:
看来你VB的基础也不太好?DimcurrentComAsZPortmsgAvailEventArgs=NewMsgAvailEventArgs(readPanidReq,MESSAGE_ID.ZB_READ_CONFIGURATION)只是定义了变量,但从未赋值你就敢currentCom.Name="COM6"直接空引用异常,Name是只读属性,不能直接赋值currentCom.Invoke(currentCom,msgAvailEventArgs)你看看如何取得当前串口ZPort对象的实例currentCom
解决方案十三:
引用11楼dongxinxi的回复:

看来你VB的基础也不太好?DimcurrentComAsZPortmsgAvailEventArgs=NewMsgAvailEventArgs(readPanidReq,MESSAGE_ID.ZB_READ_CONFIGURATION)只是定义了变量,但从未赋值你就敢currentCom.Name="COM6"直接空引用异常,Name是只读属性,不能直接赋值currentCom.Invoke(currentCom,msgAvailEventArgs)你看看如何取得当前串口ZPort对象的实例currentCom

按照你说的那样使用就木错误提示了,非常感谢!;工作中主要用C,对VB的了解程度也只是做做串口配置小工具的程度,跟零基础差别不大;另外,如你所说ZPortLib中有扫描串口的方法portControl.StartAutoScan()
解决方案十四:
使用ZPortLib进行串口扫描后,获取不到ZPort对象dll中的成员方法,如下图所示:尝试的代码:PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadDimreadPanidReqAsNewZB_READ_CONFIGURATIONDimreadPanidInterfaceAsIREQUEST=CType(readPanidReq,IREQUEST)readPanidReq.ConfigId=&H1DimmsgAvailEventArgsAsMsgAvailEventArgs'PublicSubNew(ByValmsgAsObject,ByValmsgIDAsTI.ZPI2.MESSAGE_ID)TI.ZPortLib.MsgAvailEventArgs(的成员)msgAvailEventArgs=NewMsgAvailEventArgs(readPanidReq,MESSAGE_ID.ZB_READ_CONFIGURATION)DimportCfg(1)AsPortSettingsportCfg(0)=NewPortSettings("COM29",True,PortSettings.DataBitsValue.DATABITS_8,PortSettings.ParityValue.PARITY_NONE,115200,1,False,False)DimportManagerAsNewController'**********************************************************************'第一步:扫描串口,获得一个COMPortList结果'官方描述:PublicSubStartAutoScan()TI.ZPortLib.Controller(的成员)'**********************************************************************portManager.StartAutoScan()'portManager.ManualScan(portCfg)'能够显示出扫描到的串口Fori=0To5MessageBox.Show(portManager.COMPortList(i))'能够打印出PC上当前COM口,如“COM1”'MessageBox.Show(portManager.ZPortList(0).Name)'没有打印ZPortList中的任何信息!!?????Next'**********************************************************************'第二步:从COMPortList选定其中一个有效的ZPort并对其配置'**********************************************************************'**********************************************************************'第三步:'将req(请求)发送给指定串口'**********************************************************************'这里开始有疑问:'目前在dll里找到两个看起来和发送相关的方法:'1.9L图片ZScript.dll中的send()'2.ZPortLib.dll中的PublicOverridableSubInvoke(ByValsenderAsTI.ZPortLib.ZPort,ByValeAsTI.ZPortLib.MsgAvailEventArgs)'这里是要求我程序实现Invoke(TI.ZPortLib.ZPort,TI.ZPortLib.MsgAvailEventArgs)??????'DimcurrentComAsNewZPort'Invoke(currentCom,msgAvailEventArgs)EndSub

是我语法上的问题?还是其他?请大神们指正,3Q

时间: 2024-11-10 00:42:59

VB.Net使用接口的问题的相关文章

VB数据访问接口

VB数据访问接口功能及含义 ADC高级数据连接器(Advanced Data Connector): 提供绑定ADO数据源到窗体的数据绑定控件上.ADC主要是一种直接访问或者通过ADO访问远程OLEDB对象的一种技术,它也支持主要应用在微软IE浏览器上的数据绑定控件.它是特地为Web上的浏览器为基础的应用程序而设计的. ADOActive数据对象(Active Data Objects): ADO实际是一种提供访问各种数据类型的连接机制.ADO设计为一种极简单的格式,通过ODBC的方法同数据库接

vb.net中用接口实现多态性

用户可以在vb.net中使用接口来完成多态性的实现.通过使用多接口,用户可以在不中断运行代码的情况下,允许运行多种软件的系统组件. 接口象类那样描述属性和方法,但是它和类不同的是,接口不能提供任何implementation. 为了使用接口来实现多态性,用户需先建立一个接口,并且通过其他的几个类实现该接口.用户可以用几乎相同的方法调用其他对象已经实现的方法. 下面这个例子就是使用接口的方法实现多态性: Namespace PolyNamespace Interface Animal Sub Mo

VB调用Matlab在WEDM仿真系统中的应用

基于BP神经网络的电火花线切割(WEDM)工艺仿真系统需要具有工艺数据库管理 .工艺效果预测.加工参数优化等设计功能.借助Matlab的神经网络工具箱,可 以建立良好的工艺效果预测模型和参数优化模型,这正是工艺仿真软件最主要的 功能要求.VB是Windows操作系统下优秀的可视化编程工具软件,在用户界面设计 和快速开发等方面具有独特的优势.同时,Matlab仿真软件以其强大的科学计算 功能和开放式开发思想使其成为当前最为流行的仿真计算工具.综合两种开发环 境各自的优势,可采用VB与Matlab混

设计模式之观察者模式(Observer Pattern)(一)

server|设计 我们通常在同一时间将我们的数据表示为各种不同的形式,比如列表.图形等等. 我们也同样希望当数据改变时,将这个更新信息很方便的通知所有依赖于它的各个对象. 例如:我们可以使用图形.表格或者列表框显示股票的价格,当股票的价格发生改变时,我们期望同时很方便的更改其它部分. 在这种情况下我们就可以使用Observer模式.我们可以很容易的利用Observer模式使我们的程序可以很方便的解决上面的问题. 结构图: 观察者模式假定保存数据的对象和显示数据的对象是分开的,负责显示数据的对象

vb net 接口 泛型-VB.NET 泛型与接口问题

问题描述 VB.NET 泛型与接口问题 interface IDataElement property Name as string property Value as object end interface public class DataElementSet(Of T as IDataElement) implements IList(Of T) ... end class public Class A implements IDataElement ... end class publ

VB.NET中实现IEnumerator接口

VB.NET中实现IEnumerator接口在面向对象的设计中,经常会用到有类似父子关系的这个对象,比如在我现在的一个项目中,有订单对象,在一个订单下又包含多个产品,这时我就想用Iterator模式来封装订单下的产品,在dot Net中的IEnumerator接口就是用来实现迭代的,来支持dot Net中的for each的操作. 要实现IEnumerator接口,需在实现以下几个函数来支持IEnumerator接口的操作 Overridable ReadOnly Property Curren

vbnet-请教关于vb inotifypropertychanged接口的问题

问题描述 请教关于vb inotifypropertychanged接口的问题 我写了个dll,其中定义了一个类,实现了inotifypropertychanged接口,其中有个propertychanged事件,当我做了一个wpf用一个textbox绑定到这个类的实例,绑定是成功的,但当改变这个实例的属性时,textbox不跟随变化(此时我是用wpf引用的这个dll),然后我试了下,把这个类的代码直接写在wpf的解决方案中时,textbox会跟随变化,试了几次,好像是通过引用dll时,好像wp

VB.NET 连接 POS机 DLL接口出错,请高手指点!!!

问题描述 POS机与pc通讯函数函数原型:intExchangeData(unsignedcharTransType,unsignedchar*ToTerminal,unsignedshortReqLenunsignedchar*FrmTerminal,unsignedshort*RepLen,unsignedshortTimeOut)输入参数:TransType交易类型ToTerminal交易请求数据ReqLen交易请求数据长度FrmTerminal交易应答数据RepLen交易应答数

VB编程如何控制I/O接口

VB没有提供直接读写I/O口的方法.所以只能借助其他语言来编写DLL,然后在VB中调用.  如果你在Windows下使用过C/C++,那么编写这样的DLL可能没有什么困难.在C语言里都包括inp和outp函数.可以把下面这段C语言代码(32位)编译生成DLL,然后在VB中调用.  代码如下:  #include #include /*作用:从指定端口读入一个字节 参数:portid端口号 返回值:读入的字节*/ int _stdcall Inport(short portid) { return