谢谢 gump2000(阿甘)回答:
上面的是codeguru是的代码,功能太弱了我的插件会在主程序上加上一个子菜单,当点击菜单时,我应该怎么样去执行插件中的相应代码

解决方案 »

  1.   

    http://www.21code.com/codebase/?pos=down&id=2005
    这个?
      

  2.   

    http://search.microsoft.com/default.asp?qu=addin&boolean=ALL&nq=NEW&so=RECCNT&p=1&i=00&i=01&i=02&i=03&i=04&i=05&i=06&i=07&i=08&i=09&i=10&i=11&i=12&i=13&i=14&i=15&i=16&i=17&i=18&i=19&i=20&i=21&i=22&i=23&i=24&i=25&i=26&i=27&i=28&i=29&i=30&i=31&i=32&i=33&i=34&i=35&i=36&i=37&i=38&i=39&i=40&i=41&i=42&i=43&i=44&i=45&i=46&i=47&i=48&i=49&i=50&i=51&ig=03&siteid=us/dev
      

  3.   

    利用 VB 的 Add-In 向导.再看看下面这篇文章.
    Create Your Own Visual Basic Add-Ins    
    http://www.csdn.net/Develop/Read_Article.asp?Id=12769不过调试的时候麻烦, 要不停的 编译,加载..... 
    常常弄地 手忙脚乱的.
      

  4.   

    VERSION 5.00 
    Begin {AC0714F6-3D04-11D1-AE7D-00A0C90F26F4} Connect  
       ClientHeight    =   8595 
       ClientLeft      =   0 
       ClientTop       =   0 
       ClientWidth     =   11175 
       _ExtentX        =   19711 
       _ExtentY        =   15161 
       _Version        =   393216 
       Description     =   "Open a project stored in a database form a filtered list." 
       DisplayName     =   "Filtered Project Database Open" 
       AppName         =   "Microsoft Project" 
       AppVer          =   "Microsoft Project 9.0" 
       LoadName        =   "Startup" 
       LoadBehavior    =   3 
       RegLocation     =   "HKEY_CURRENT_USER\Software\Microsoft\Office\MS Project" 
    End 
    Attribute VB_Name = "Connect" 
    Attribute VB_GlobalNameSpace = False 
    Attribute VB_Creatable = True 
    Attribute VB_PredeclaredId = False 
    Attribute VB_Exposed = True 
    Option Explicit Implements IDTExtensibility2 Dim mfrmAddIn                   As New frmFilteredProjects 
    Public AppInstance              As Object 
    Dim mcbMenuCommandBar           As Office.CommandBarButton 
    Public WithEvents MenuEventHandler    As Office.CommandBarButton 
    Attribute MenuEventHandler.VB_VarHelpID = -1 ' String Constants for Project menu item 
    Const CMB_NAME As String = "File" 
    Const CMB_CAPTION As String = "Open &My Projects from Database" 
    Const CMB_KEY As String = "OpenMyDatabaseProjects" Sub Show() 
         
        On Error Resume Next 
         
        If mfrmAddIn Is Nothing Then 
            Set mfrmAddIn = New frmFilteredProjects 
        End If 
         
        'Set variables in form 
        Set mfrmAddIn.AppInstance = AppInstance 
        mfrmAddIn.Show vbModal 
    End Sub '------------------------------------------------------ 
    'connects the add-in to Project 
    '------------------------------------------------------ 
    Private Sub IDTExtensibility2_OnConnection(ByVal Application As Object, _ 
        ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, _ 
        ByVal AddInInst As Object, custom() As Variant) 
         
        Dim mcbToolBar As Office.CommandBar 
         
        On Error GoTo OnConnectionErr 
         
        'save the Project application instance 
        Set AppInstance = Application 
         
        'this is a good place to set a breakpoint and 
        'test various addin objects, properties and methods 
         
        If ConnectMode = ext_cm_External Then 
            'Used by the wizard toolbar to start this wizard 
            Me.Show 
        Else 
            'The next two lines add a custom menu item called CMB_CAPTION to 
            'the CMB_NAME menu item 
            Set mcbMenuCommandBar = CreateAddInMenuCommandBar(CMB_NAME, _ 
                CMB_CAPTION, CMB_KEY, AddInInst) 
            Set MenuEventHandler = mcbMenuCommandBar 
        End If 
         
        Exit Sub OnConnectionErr:     AddInErr Err 
         
    End Sub '----------------------------------------------------------- 
    'disconnects add-in from Office application 
    '----------------------------------------------------------- 
    Private Sub IDTExtensibility2_OnDisconnection(ByVal RemoveMode As AddInDesignerObjects.ext_DisconnectMode, custom() As Variant)     On Error Resume Next 
         
        'Remove any added menu items, toolbar items, and or toolbars... 
        RemoveAddInCommandBars (RemoveMode) 
         
        'shut down the add-in 
        Unload mfrmAddIn 
        Set mfrmAddIn = Nothing 
         
    End Sub Private Sub IDTExtensibility2_OnStartupComplete(custom() As Variant) 
        ' 
    End Sub Private Sub IDTExtensibility2_OnAddInsUpdate(custom() As Variant) 
        ' 
    End Sub Private Sub IDTExtensibility2_OnBeginShutdown(custom() As Variant) 
        ' 
    End Sub '------------------------------------------------------ 
    'This event fires when the menu control is clicked in the IDE 
    '------------------------------------------------------ 
    Private Sub MenuEventHandler_Click(ByVal Ctrl As Office.CommandBarButton, _ 
        CancelDefault As Boolean) 
         
        On Error Resume Next 
        Me.Show 
         
    End Sub '------------------------------------------------------ 
    'This event fires when the toolbar control is clicked in the IDE 
    '------------------------------------------------------ 
    Private Sub ToolbarEventHandler_Click(ByVal Ctrl As Office.CommandBarButton, _ 
        CancelDefault As Boolean) 
         
        On Error Resume Next 
        Me.Show 
         
    End Sub '------------------------------------------------------- 
    ' Displays message box with error information. 
    '------------------------------------------------------- 
    Sub AddInErr(errX As ErrObject) 
         
        Dim strMsg As String 
         
        strMsg = "Application : " & App.Title & vbCrLf & _ 
            "Error Number : " & errX.Number & vbCrLf & _ 
            "Error Description : " & errX.Description 
        MsgBox strMsg, vbExclamation, "Error" 
             
    End Sub '------------------------------------------------------- 
    'Adds menu item to the host app menu 
    '------------------------------------------------------- 
    Function CreateAddInMenuCommandBar(sMenuName As String, _ 
        sCaption As String, sKey As String, ByVal AddInInst As Object) _ 
        As Office.CommandBarControl 
         
        Dim cbMenuCommandBar As Office.CommandBarControl  'command bar object 
        Dim cbMenu As Object 
       
        On Error GoTo AddToAddInCommandBarErr 
         
        ' Return reference to application menu. 
        Set cbMenu = AppInstance.CommandBars(sMenuName) 
         
        If cbMenu Is Nothing Then 
            'not available so we fail 
            Exit Function 
        End If 
         
        'Check if the menu item exists already 
        Set cbMenuCommandBar = cbMenu.FindControl(Tag:=sKey) 
        If cbMenuCommandBar Is Nothing Then 
            'add commandbar button to the menu 
            Set cbMenuCommandBar = cbMenu.Controls.Add(1) 
        End If 
         
        'set the caption 
        cbMenuCommandBar.Caption = sCaption 
        cbMenuCommandBar.Tag = sKey 
        cbMenuCommandBar.OnAction = "!<" & AddInInst.ProgId & ">" 
         
        Set CreateAddInMenuCommandBar = cbMenuCommandBar 
         
        Exit Function 
         
    AddToAddInCommandBarErr: 
        AddInErr Err 
         
    End Function '------------------------------------------------------- 
    'Removes added in commandbars 
    '------------------------------------------------------- 
    Function RemoveAddInCommandBars(ByVal _ 
        RemoveMode As AddInDesignerObjects.ext_DisconnectMode) 
       
        On Error GoTo RemoveAddInCommandBars_Err 
         
        ' If user unloaded add-in, remove button. Otherwise, add-in is 
        ' being unloaded because application is closing; in that case, 
        ' leave button as is. 
        If RemoveMode = ext_dm_UserClosed Then 
            On Error Resume Next 
            'Delete the custom menu commandbar control, if found 
            Set mcbMenuCommandBar = AppInstance.CommandBars.FindControl(Tag:=CMB_KEY) 
            If Not mcbMenuCommandBar Is Nothing Then 
                mcbMenuCommandBar.Delete 
            End If 
            Set mcbMenuCommandBar = AppInstance.CommandBars.FindControl(Tag:=CMB_KEY) 
            If Not mcbMenuCommandBar Is Nothing Then 
                mcbMenuCommandBar.Delete 
            End If 
            Set mcbMenuCommandBar = AppInstance.CommandBars.FindControl(Tag:=CMB_KEY) 
            If Not mcbMenuCommandBar Is Nothing Then 
                mcbMenuCommandBar.Delete 
            End If 
             
            On Error GoTo RemoveAddInCommandBars_Err 
        End If 
         
    RemoveAddInCommandBars_End: 
        Exit Function 
         
    RemoveAddInCommandBars_Err: 
        AddInErr Err 
        Resume RemoveAddInCommandBars_End 
    End Function 
      

  5.   

    to sonicdater(发呆呆)
    我不是要做VB的ADDIN,而是要让自己的程序支持ADDIN
      

  6.   

    你的Add-In 是 .dll 还是个 .exe ?
      

  7.   

    你想 通过 点击菜单, 而 传递值 给你的 .dll 吗?
      

  8.   

    那这就相当于 给 .dll中的函数 传递值呀. 在 菜单的Click 事件中 实现呀.
      

  9.   

    你用 Load 方法 添加的话, 就很好办.
    如果 是用 api 动态添加的, 那就麻烦了.
    要用 Subclass 技术, 捕获 菜单被 Click 的消息了.
      

  10.   

    呵呵,很 不幸我是用的api
    我用了subclass,可是我怎么在插件中响应对菜单的操作(插件和菜单要对应上)
      

  11.   

    你既然已用了 subclass , 那你 能响应 菜单的 Click 了吗?
    这个和 你是否有插件 无关.只要你 已实现 响应菜单了. 什么都好办了.
      

  12.   

    '假设你的dll是 Test.dll ,且你需要 调用它的 tmpMethod Function
    Declare Function tmpMethod Lib "Test.dll" (Param As String) As Boolean'下面的,应该是 你subclass中 响应菜单click事件的 回调函数
    Sub CallBackFunction(.........)
        Select Case lMsg '代表传入的消息
               Case WM_MENUCOMMAND '假设是 拦截这个消息
                    '下面是响应你的 .dll 
                    '调用 tmpMethod 函数
                    tmpReply = tmpMethod ("I am Message")
                    If tmpReply = True Then Msgbox "OK"
         ........
        End Selcet
    End Sub
      

  13.   


     呵呵,可没有那么简单!  要知道所谓Add-In,都是指在主程序编写时,并不知道它有什么方法、属性、事件,所以要想实现插件,最重要的是解决如何在运行时得到这些,然后才谈得上怎么调用!  推荐你和《超级文档管理器》这个软件的作者联系学习一下!
      

  14.   

    to uguess(uguess)
    是啊,我现在难点是在注册菜单时,应该采用什么方法
    1。将菜单项与插件联系起来,也就是说,我选择了一个菜单项应该知道是哪个插件的菜单项。
    2。采用事件超级文档管理器》这个软件的作者怎么联系啊
      

  15.   

    作者:[email protected]
    主页:emanager.51.net   学学这个软件吧,它就实现了“插件”!