Implements IDTExtensibility2的宿主程序怎么开发?

vansoft 2011-02-16 03:31:14
IDTExtensibility2是个接口,实现插件连接到宿主程序。
比如OFFICE、VB等。它有几个接口事件:

Implements IDTExtensibility2

Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode _
As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
MsgBox "You connected to clsVBComTest "
End Sub

Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
'
End Sub

Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
'
End Sub
Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
'
End Sub

Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
'
End Sub


我们开发OFFICE插件时,就是这样写的。
现在的问题是我自己的程序怎么做成象WORD一样,
可以让别人通过这个接口做插件,插进来让我扩充软件的功能。
...全文
479 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vansoft 2011-02-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tiger_zhao 的回复:]
糊涂了不是,调用那个接口的成员变量首先要声明为该接口。

VB code
Dim AddInInst As IDTExtensibility2

又:你搞定了是一回事,把解决方案共享出来才算完结。
[/Quote]

一、确实糊涂了。
二、确实象你说的那样要定义一个该接口,然后把oAddIn给这个接口,用这个接口调就可以了。
Tiger_Zhao 2011-02-17
  • 打赏
  • 举报
回复
糊涂了不是,调用那个接口的成员变量首先要声明为该接口。
Dim AddInInst As IDTExtensibility2

又:你搞定了是一回事,把解决方案共享出来才算完结。
vansoft 2011-02-17
  • 打赏
  • 举报
回复
搞定,结帖。
vansoft 2011-02-17
  • 打赏
  • 举报
回复
插件的Connect.cls的代码:

Option Explicit

Implements IDTExtensibility2

Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant)
MsgBox "IDTExtensibility2_OnAddInsUpdate", vbInformation, "Message"
End Sub

Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant)
MsgBox "IDTExtensibility2_OnBeginShutdown", vbInformation, "Message"
End Sub

Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom() As Variant)
MsgBox "IDTExtensibility2_OnConnection", vbInformation, "Message"
End Sub

Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)
MsgBox "IDTExtensibility2_OnDisconnection", vbInformation, "Message"
End Sub

Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant)
MsgBox "IDTExtensibility2_OnStartupComplete", vbInformation, "Message"
End Sub


宿主调用的代码:

Private Sub cmdTest_Click()
Dim oAddIn As Object
Dim Custom() As Variant
Dim AddInInst As Object
Set oAddIn = CreateObject("MyAddIn.Connect")
oAddIn.IDTExtensibility2_OnConnection Me, ext_cm_Startup, AddInInst, Custom
Set oAddIn = Nothing
End Sub


现象:
Connect.cls类里的接口默认是Private,调用是不成功的。
我手动改为Public,可以调用成功,弹出对话框。

问题:
Word插件的代码里是Private,WORD却能调用,或者说是WORD是怎么调用私有的IDTExtensibility2_OnConnection这些私有的方法的?
东方之珠 2011-02-17
  • 打赏
  • 举报
回复
枕善居有一个VB编写的插件及调用示例,不知道这种方法对你有没有帮助:http://www.mndsoft.com/blog/VB6/Plugin.html
ah_2018 2011-02-16
  • 打赏
  • 举报
回复
同样是ADDIN,,没这么写过。我是定义APPLICATION对象来写。
感觉你的很高级
Tiger_Zhao 2011-02-16
  • 打赏
  • 举报
回复
1)定义一套接口让插件继承
2)规定一个插件登记方式,注册表或配置文件,只需要插件实现接口的那个类的 ProgID,你通过 CreateObject() 创建对象,赋值给定义为接口类型的变量,就能调用接口成员了。
king06 2011-02-16
  • 打赏
  • 举报
回复
没搞过,用C估计好搞些. 看讲……

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧