社区
API
帖子详情
关于插件?
zhsunson
2004-12-24 10:23:51
怎么样让一个主程序支持插件?DLL插件和主程序之间的通用接口是如何实现的?
原理是怎么样的?
...全文
207
18
打赏
收藏
关于插件?
怎么样让一个主程序支持插件?DLL插件和主程序之间的通用接口是如何实现的? 原理是怎么样的?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
padin
2005-01-26
打赏
举报
回复
问题是,有了DLL,主程序怎么调用?
zhsunson
2005-01-14
打赏
举报
回复
不懂E文,没找到!
uguess
2005-01-10
打赏
举报
回复
//MSDN我只有2003的,讲的都是.net里的东东
可以在在线的 MSDN 中搜索。
或到 www.freevbcode.com 中搜一下,有代码。
zhsunson
2005-01-10
打赏
举报
回复
我想到一个方案,不知道可不可行
动态加载指定目录里的DLL文件,有一个公共的类模块,里面有一个通用的函数调用程序
通过传函数名去调用,用Select case判断调用当个函数?
zhsunson
2005-01-10
打赏
举报
回复
MSDN我只有2003的,讲的都是.net里的东东
uguess
2005-01-06
打赏
举报
回复
详细的说明和例子在MSDN里有的是,以 Implements 为关键字搜一下看看吧
zhsunson
2005-01-06
打赏
举报
回复
不怎么明白,能详细一点吗?有示例更好!
uguess
2005-01-05
打赏
举报
回复
插件的支持方式有多种,在VB中较常用的是使用 Implements 方式。可参考MSDN:
通过接口的实现提供多态性
部件对象模型 (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 程序员指南》“用对象编程”的“多态性”中详述。
zhsunson
2005-01-04
打赏
举报
回复
顶,有什么好的见意吗?
zhsunson
2004-12-31
打赏
举报
回复
我的思路不是这样的
我是想先写一个主程序,提供一个通用接口,用来支持插件。
以后我写的程序(指DLL文件),就可以放到一个指定的位置,让主程序自动调用。
TalentAyee
2004-12-30
打赏
举报
回复
回楼主:
目前我只能用单一公共函数实现,因为我觉得在vb里很麻烦也没有必要
知道插件所提供的所有函数,方法、属性等,一般插件都是为了增加或增强
主程序功能的,我们应尽量使用主程序提供的资源进行处理。
我可以这样调用:
Object.DoFunction(myMainApp) ‘myMainApp是主程序提供的对象,用来
提供资源或功能。
这样插件可以方便使用主程序的东西。
zhsunson
2004-12-29
打赏
举报
回复
我先测试一下,
再问一下,插件里的函数、方法和属性是不是都是预先定义好的,都是单一的,不能更改的那种?
mingtian2008
2004-12-29
打赏
举报
回复
up
zdcwin
2004-12-29
打赏
举报
回复
gz,up
TalentAyee
2004-12-28
打赏
举报
回复
我还有个龌龊的想法:
假定我们要建立的所有插件文件都是*.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 类型参数等
还可以在自描述文件中添加功能名称等信息,我们可以借助它来动态生成菜单名字或工具按牛名称!
好了,我只能做到这一步了。。。
zhsunson
2004-12-27
打赏
举报
回复
是不是在指定的目录里动态加载所有的DLL文件?然后在菜单中添加一个选项?
而DLL文件在某方面有相同点?
zhsunson
2004-12-25
打赏
举报
回复
没有人知道吗?都没人出声?
主程序是怎么样加载插件的?
TalentAyee
2004-12-25
打赏
举报
回复
我也想知道如何实现
我是这么想的:
用activeX.exe工程实现
Eclipse的Maven2
插件
.zip
官网公布的 Eclipse 的 Maven2
插件
,本
插件
...关于安装 Maven2
插件
到 Eclipse 的详细步骤,请参考博客《集成 Maven 2
插件
到 eclipse 的过程》,博客地址:http://blog.csdn.net/defonds/article/details/7847446。
html什么是
插件
,什么是jquery
插件
?
什么是jquery
插件
?jQuery
插件
,就是开发爱好者自己利用Jquery制作的特效,然后经过封包或包装处理成js文件,发布到网上供大家使用的脚本集合。通常这类
插件
除了调用jQuery库文件,还需要调用
插件
文件。都有使用说明...
如何为Safari浏览器安装Flash
插件
?
很多朋友使用Safari浏览器的时候总会发现缺少一个
插件
——Flash,导致视频不能播放,甚至很多网站打开不完全,Safari 浏览器默认是不支持 Flash 视频播放的,今天macz小编为大家介绍如何安装 Flash
插件
及播放。...
cad
插件
_还不会用CAD
插件
?55款超实用CAD
插件
大合集!无套路直接送你
我们经常都会说:“会不会用
插件
,是你懂不懂这个软件的门槛。”这句话是有一定道理的,我们在使用CAD的时候就会发现,用
插件
和不用
插件
的效率简直一个天一个地!不过很多刚入门不久的小伙伴对
插件
还不熟悉,没关系...
Adobe XD有哪些好用的
插件
?
以上就是今天关于好用的Adobe XD
插件
的分享,节省人力,提高效率,从充分利用好高效的Adobe XD
插件
开始。被誉为中文版Adobe XD的新一代设计协作工具即时设计,支持导入XD文件,可以在线编辑XD文件,还可以使用上百款...
API
1,488
社区成员
23,276
社区内容
发帖
与我相关
我的任务
API
VB API
复制链接
扫一扫
分享
社区描述
VB API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章