关于插件? 怎么样让一个主程序支持插件?DLL插件和主程序之间的通用接口是如何实现的?原理是怎么样的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也想知道如何实现 我是这么想的: 用activeX.exe工程实现 是不是在指定的目录里动态加载所有的DLL文件?然后在菜单中添加一个选项?而DLL文件在某方面有相同点? 我还有个龌龊的想法: 假定我们要建立的所有插件文件都是*.dll 我们硬性规定每一个插件都主动提供一个自描述文件(文本的)和遵守调用约定 例如我们规定插件都提供方法: object.Init() object.DoFunction() object.Term() 代表插件的初始化、功能调用、结术卸载 其自描述文件为:FileName=example.dll ObjectName=myplus 在管理调用插件的主程序中可以使用createobject()加载插件 dim Myplus as string myplus=GetPlusFileName(plusindex) myplus=myplus & "." & GetPlusObjectName(plusindex) set plus=createobject(myplus) call plus.Init 当需要使用插件功能时:call plus.DoFunction() ... 楼主明白吗? 我就是这样暂时实现的插件功能,你还可以给每一个共用函数添加varient 类型参数等 还可以在自描述文件中添加功能名称等信息,我们可以借助它来动态生成菜单名字或工具按牛名称! 好了,我只能做到这一步了 回楼主: 目前我只能用单一公共函数实现,因为我觉得在vb里很麻烦也没有必要知道插件所提供的所有函数,方法、属性等,一般插件都是为了增加或增强主程序功能的,我们应尽量使用主程序提供的资源进行处理。 我可以这样调用: Object.DoFunction(myMainApp) ‘myMainApp是主程序提供的对象,用来提供资源或功能。 这样插件可以方便使用主程序的东西。 我的思路不是这样的我是想先写一个主程序,提供一个通用接口,用来支持插件。以后我写的程序(指DLL文件),就可以放到一个指定的位置,让主程序自动调用。 插件的支持方式有多种,在VB中较常用的是使用 Implements 方式。可参考MSDN:通过接口的实现提供多态性部件对象模型 (COM) 的最显著的特性是对象具有实现多个接口的能力。除多态性外,多个接口还提供了增量式或渐进式开发的方法,在发生改动时不必重新编译系统中的所有部件。以由密切相关的函数组成的接口方式定义功能,就可以只实现部件所需的功能,需要时再通过实现附加的接口来扩展其功能。由于部件的新版本在添加新接口或增强接口时,可以继续提供原有的接口,这样就简化了保持兼容的问题。如果有必要,客户端应用程序的后续版本就可以使用它。继承与多态性如《Visual Basic 程序员指南》“用对象编程”的“多态性”所阐述的,绝大多数面向对象的编程工具通过继承来提供多态性。对小规模的开发任务来说,这是一种很有效的技术,但大规模的系统中,这种方法是有问题的。一方面,导致这些困难是由于需要对继承树深处的类作必要的改动。为了获得改动后的优点必须进行重编译。如果到发布新版本的最后期限时,重新编译失败将导致严重的后果。更严重的是,过分强调继承驱动多态性往往导致大量的资源从开发任务到前沿设计任务的转移,在最终用户可能发现─ 通过掌握的经验─ 系统是否真地完成了期望的目的之前,却没有解决积压的开发任务或缩短时间。所以,快速原型工具和快速应用程序开发 (RAD) 比 OOP 工具得到更广泛的接受。Visual Basic 与 COMVisual Basic 遵循 COM,强调多接口是提供多态性的一种更灵活的途径。这样,软件可以一个接口一个接口地渐进开发,而不是原来那样通过一个很长的设计过程从所有必须的先例派生。刚开始时,对象可以比较小,只具有最少的功能。随着在实践中逐渐明确该对象应该提供的功能,再不断实现这些新的功能。当实现新的接口时,继续保留原有代码以支持旧的接口。Implements 功能Visual Basic 使用 Implements 关键字来提供一种与辅助接口公用的方式。例如,如果工程引用了描述 IFinance 接口的类型库,则可以在类模块中包含以下代码:Implements IFinance由于类型库只包括接口,不包括实现方案,因此可以按“标准接口的实现与使用”所描述的,给 IFinance 接口的每个属性和方法增加代码。接口即协议为使用 Implements 功能而创建接口,就是将其永久地具体化。接口不变性是部件设计中很重要的原则,因为它保护原有的针对该接口编写的系统。当接口确实需要增强时,就应创建一个新的接口。可以称新接口为 Interface2,以说明新接口与已有接口的关系。频繁地生成新接口将使部件中充斥大量的无用接口,好的接口设计应该小而彼此独立,以尽可能减少对性能的影响。因素化接口确定属于接口的属性和方法的过程叫做因素化。一般而言,应使接口的功能密切相关。接口功能太多会使接口很笨拙,把功能分的太细又会增加额外的负担。例如,下面的代码调用 Velociraptor 类的三个不同接口:Public Sub CretaceousToDoList(ByVal vcr1 As _ Velociraptor, ByVal vcr2 As Velociraptor) Dim dnr As IDinosaur Dim prd As IPredator vcr1.Mate vcr2 Set dnr = vcr1 dnr.LayEggs Set prd = vcr1 prd.KillSomethingAndEatItEnd Sub要使用 IDinosaur 和 IPredator 接口的方法,必须把对象赋给正确接口类型的变量。使用灵活数据结构的接口一般比使用固定数据类型的接口经久耐用。如上面提到的,设计接口不象创建大型继承树那样容易出错。如果以较小的接口开始,则很快就可以让系统的一部分先运行起来。以后再通过添加接口逐渐扩展这个系统,从而获得真正面向对象编程的优点。创建和使用接口的工具关于创建接口的技术在以下相关主题论述,在 MkTypLib 应用程序 (MIDL) 的文档中也有介绍。 使用 Visual Basic 创建标准接口 介绍 Visual Basic 提供的创建接口的工具及过程。标准接口的实现与使用 如何引用类型库来实现与使用接口。类型库的分布式要求。 详细信息 Implements 功能在《Visual Basic 程序员指南》“用对象编程”的“多态性”中详述。 详细的说明和例子在MSDN里有的是,以 Implements 为关键字搜一下看看吧 MSDN我只有2003的,讲的都是.net里的东东 我想到一个方案,不知道可不可行动态加载指定目录里的DLL文件,有一个公共的类模块,里面有一个通用的函数调用程序通过传函数名去调用,用Select case判断调用当个函数? //MSDN我只有2003的,讲的都是.net里的东东可以在在线的 MSDN 中搜索。或到 www.freevbcode.com 中搜一下,有代码。 问题是,有了DLL,主程序怎么调用? 复制TreeView控件? 一个SQL语句的问题.请高手解答??? 高手请来救命,读取2进制文件的问题... 窗体子类化问题,高手请进。 CommonDialog.ShowFont问题 200分!!请问如何编程控制实现listview的水平滚动条的左右滚动? 怎样用迭代法求经典递归问题:hanoi塔? vb6.0生成ActiveX.dll,中byref无返回问题。。急 VB的接口API 解压缩的问题?——川川 用sql语句怎么实现在多个表中的查询? 用VB编写添加"文件夹树"的问题! 请问:true dbgrid pro 7.0控件的属性与方法!!!(100分全给)
我是这么想的:
用activeX.exe工程实现
而DLL文件在某方面有相同点?
假定我们要建立的所有插件文件都是*.dll
我们硬性规定每一个插件都主动提供一个自描述文件(文本的)和遵守调用约定
例如我们规定插件都提供方法:
object.Init()
object.DoFunction()
object.Term()
代表插件的初始化、功能调用、结术卸载
其自描述文件为:FileName=example.dll
ObjectName=myplus
在管理调用插件的主程序中可以使用createobject()加载插件
dim Myplus as string
myplus=GetPlusFileName(plusindex)
myplus=myplus & "." & GetPlusObjectName(plusindex)
set plus=createobject(myplus)
call plus.Init
当需要使用插件功能时:call plus.DoFunction()
...
楼主明白吗?
我就是这样暂时实现的插件功能,你还可以给每一个共用函数添加varient 类型参数等
还可以在自描述文件中添加功能名称等信息,我们可以借助它来动态生成菜单名字或工具按牛名称!
好了,我只能做到这一步了
目前我只能用单一公共函数实现,因为我觉得在vb里很麻烦也没有必要
知道插件所提供的所有函数,方法、属性等,一般插件都是为了增加或增强
主程序功能的,我们应尽量使用主程序提供的资源进行处理。
我可以这样调用:
Object.DoFunction(myMainApp) ‘myMainApp是主程序提供的对象,用来
提供资源或功能。
这样插件可以方便使用主程序的东西。
通过接口的实现提供多态性
部件对象模型 (COM) 的最显著的特性是对象具有实现多个接口的能力。除多态性外,多个接口还提供了增量式或渐进式开发的方法,在发生改动时不必重新编译系统中的所有部件。以由密切相关的函数组成的接口方式定义功能,就可以只实现部件所需的功能,需要时再通过实现附加的接口来扩展其功能。由于部件的新版本在添加新接口或增强接口时,可以继续提供原有的接口,这样就简化了保持兼容的问题。如果有必要,客户端应用程序的后续版本就可以使用它。继承与多态性
如《Visual Basic 程序员指南》“用对象编程”的“多态性”所阐述的,绝大多数面向对象的编程工具通过继承来提供多态性。对小规模的开发任务来说,这是一种很有效的技术,但大规模的系统中,这种方法是有问题的。一方面,导致这些困难是由于需要对继承树深处的类作必要的改动。为了获得改动后的优点必须进行重编译。如果到发布新版本的最后期限时,重新编译失败将导致严重的后果。更严重的是,过分强调继承驱动多态性往往导致大量的资源从开发任务到前沿设计任务的转移,在最终用户可能发现─ 通过掌握的经验─ 系统是否真地完成了期望的目的之前,却没有解决积压的开发任务或缩短时间。所以,快速原型工具和快速应用程序开发 (RAD) 比 OOP 工具得到更广泛的接受。Visual Basic 与 COM
Visual Basic 遵循 COM,强调多接口是提供多态性的一种更灵活的途径。这样,软件可以一个接口一个接口地渐进开发,而不是原来那样通过一个很长的设计过程从所有必须的先例派生。刚开始时,对象可以比较小,只具有最少的功能。随着在实践中逐渐明确该对象应该提供的功能,再不断实现这些新的功能。当实现新的接口时,继续保留原有代码以支持旧的接口。Implements 功能
Visual Basic 使用 Implements 关键字来提供一种与辅助接口公用的方式。例如,如果工程引用了描述 IFinance 接口的类型库,则可以在类模块中包含以下代码:Implements IFinance由于类型库只包括接口,不包括实现方案,因此可以按“标准接口的实现与使用”所描述的,给 IFinance 接口的每个属性和方法增加代码。接口即协议
为使用 Implements 功能而创建接口,就是将其永久地具体化。接口不变性是部件设计中很重要的原则,因为它保护原有的针对该接口编写的系统。当接口确实需要增强时,就应创建一个新的接口。可以称新接口为 Interface2,以说明新接口与已有接口的关系。频繁地生成新接口将使部件中充斥大量的无用接口,好的接口设计应该小而彼此独立,以尽可能减少对性能的影响。因素化接口
确定属于接口的属性和方法的过程叫做因素化。一般而言,应使接口的功能密切相关。接口功能太多会使接口很笨拙,把功能分的太细又会增加额外的负担。例如,下面的代码调用 Velociraptor 类的三个不同接口:Public Sub CretaceousToDoList(ByVal vcr1 As _
Velociraptor, ByVal vcr2 As Velociraptor)
Dim dnr As IDinosaur
Dim prd As IPredator
vcr1.Mate vcr2
Set dnr = vcr1
dnr.LayEggs
Set prd = vcr1
prd.KillSomethingAndEatIt
End Sub要使用 IDinosaur 和 IPredator 接口的方法,必须把对象赋给正确接口类型的变量。使用灵活数据结构的接口一般比使用固定数据类型的接口经久耐用。如上面提到的,设计接口不象创建大型继承树那样容易出错。如果以较小的接口开始,则很快就可以让系统的一部分先运行起来。以后再通过添加接口逐渐扩展这个系统,从而获得真正面向对象编程的优点。创建和使用接口的工具
关于创建接口的技术在以下相关主题论述,在 MkTypLib 应用程序 (MIDL) 的文档中也有介绍。 使用 Visual Basic 创建标准接口 介绍 Visual Basic 提供的创建接口的工具及过程。
标准接口的实现与使用 如何引用类型库来实现与使用接口。类型库的分布式要求。
详细信息 Implements 功能在《Visual Basic 程序员指南》“用对象编程”的“多态性”中详述。
动态加载指定目录里的DLL文件,有一个公共的类模块,里面有一个通用的函数调用程序
通过传函数名去调用,用Select case判断调用当个函数?