實現用VB.Net/(C#)開發K/3 BOS 插件的真正可行方法


轉了這一篇文章,原來一直想用C#做k3的插件開發,vb沒有C#用的爽呀,這篇文章寫與2011年,看來我以前沒有認真去找這個方法呀。

https://blog.csdn.net/chzjxgd/article/details/6176325

金蝶K3 BOS的插件官方是用VB6編寫的,如果

 能用.Net下的語言工具開發BOS插件是一件很愉快的事情,其中緣由不言而喻,而本文則是個人首創,實現在了用VB.NET C# C++.Net來開發BOS的插件(DLL),如果哪位還有比這方法更早的請聯系作者,修改首創的宣稱

 

在此先講幾個概念性的問題:

1、   Net類組件與COM組件:VB6開發的ActiveX.dll 可以用regsvr32.exe 注冊,它是適合COM規范的東西,.NET開發的類后綴也是dll,可是它們倆不是相同的東西,.NET(VB、C#)開發的DLL是跑在.net CLR上的中間二進制字節碼以及其他一些有自描述功能的元數據組成的,它不符合COM+規范,金蝶K/3及BOS都是用VB6開發而來的,EAS那就另當別論了,所以BOS插件說白了也是VB6調用符合COM規范的DLL,它的原理就是在原程序里(宿主)先導入放在BOS插件上的dll然后直接Byref調用Public Sub Show(Byval XXX as Object) 來把需要編程的對象傳遞過來,所以我們要VB6能調用.Net的dll,那怎么辦呢?Visual Studio提供了一個命令行工具,里面有一個叫regasm.exe的工具幫我們實現這個互通 命令有點匯編的那個masm!

 

2、   .NET中的強名strong name 說白了就是為了保護你的組件不被破壞,.Net開發的dll想給像com那樣被調用那就必須加個強名(數字簽名)

’------------------------------------------------------------------------------------------------------------------------------------------

廢話少說,照着我詳細的步驟來依葫蘆畫瓢吧

 

1,打開VS創建一個類 看圖1.1

 

                                                               圖1.1

說明:注意圖上的紅線方框,類、類名、所使用的.Net Frame版本為3.5 2.0的也可以,此測試語言我選VB,當然C#也可以,本人是basic的忠實者!

 

2,進去后在菜單 [項目]>>[添加引用] 處添加 K3ClassEvents.dll 組件(和VB6一樣要添加它)如:圖2.1

 

                                                        圖 2.1

 

3,以net的方式和規范編寫代碼,具體可參考BOS資料和VB6的工具欄插件生成的代碼稍作修改作為骨架碼

 

                                                                 圖 3.1

 

 詳細代碼貼出 附件也帶原測試工程文件,不包括實際應用功能只作示例

Imports K3ClassEvents

 

Public Class MenuBar

 

    '定義 ListEvents 接口. 必須具有的聲明, 以此來獲得事件

    Private WithEvents m_ListInterface As ListEvents

 

    Public Sub Show(ByVal oListInterface As Object)

 

        'ListEvents 接口實現

        '注意: 此方法必須存在, 請勿修改

        m_ListInterface = oListInterface

 

    End Sub

 

    Private Sub Class_Terminate()

 

        '釋放接口對象

        '注意: 此方法必須存在, 請勿修改

        m_ListInterface = Nothing

 

    End Sub

 

    Private Sub m_ListInterface_MenuBarClick(ByVal BOSTool As K3ClassEvents.BOSTool, ByRef Cancel As Boolean) Handles m_ListInterface.MenuBarClick

 

        'TODO: 請在此處添加代碼響應事件

        On Error Resume Next

 

        Select Case BOSTool.ToolName

            Case "shangla"

                '此處添加處理shangla 菜單對象的 Click 事件

                Dim form As New Form

                form.Show()

 

            Case "dizhu"

                '此處添加處理dizhu 菜單對象的 Click 事件

 

            Case "config"

                MsgBox("此處添加處理config 菜單對象的 Click 事件  config")

 

            Case "Info"

                '此處添加處理Info 菜單對象的 Click 事件

                Dim strID As String

                strID = m_ListInterface.DataSrv.ClassType("FNAME")

 

                Dim strSQL As String

                strSQL = m_ListInterface.DataSrv.sqlselectdetail & " where " & m_ListInterface.DataSrv.Filter("filterstring")

                MsgBox(strSQL)

            Case Else

        End Select

 

    End Sub

 

    Private Sub m_ListInterface_MenuBarInitialize(ByVal oMenuBar As K3ClassEvents.MenuBar) Handles m_ListInterface.MenuBarInitialize

 

        Try

 

      

            'TODO: 請在此處添加代碼響應事件

 

 

            Dim oTool As K3ClassEvents.BOSTool

            Dim oBand As K3ClassEvents.BOSBand

 

            '*************** 開始新增 BOS 菜單 ***************

 

            '新增 shangla 菜單對象,並設置屬性

            oTool = oMenuBar.BOSTools.Add("shangla")

            With oTool

                .Caption = "上拉"

                .TooltipText = "上拉源單據"

                .Description = "上拉"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/makequery.ico"

                .SetPicture(0, 0)

            End With

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '將菜單對象插入指定工具欄

 

 

            '新增 dizhu 菜單對象,並設置屬性

            oTool = oMenuBar.BOSTools.Add("dizhu")

            With oTool

                .Caption = "斗地主"

                .TooltipText = "來休閑一下吧"

                .Description = "斗地主"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/icon.ico"

                .SetPicture(0, 0)

            End With

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '將菜單對象插入指定工具欄

 

            '新增 config 菜單對象,並設置屬性

            oTool = oMenuBar.BOSTools.Add("config")

            With oTool

                .Caption = "設置"

                .TooltipText = "設置自定義執行的SQL"

                .Description = "執行"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/ProgressSuccess.ico"

                .SetPicture(0, 0)

            End With

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '將菜單對象插入指定工具欄

 

            '新增 Info 菜單對象,並設置屬性

            oTool = oMenuBar.BOSTools.Add("Info")

            With oTool

                .Caption = "信息"

                .TooltipText = "顯關相關信息"

                .Description = "信息"

                .ShortcutKey = 0

                .Visible = True

                .Enabled = True

                .BeginGroup = True

                .ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/server.ico"

                .SetPicture(0, 0)

            End With

 

            oBand = oMenuBar.BOSBands("BandToolBar")

            oBand.BOSTools.InsertBefore("mnuBackData", oTool)    '將菜單對象插入指定工具欄

 

            '*************** 結束新增 BOS 菜單 ***************

 

        Catch ex As Exception

            MsgBox(ex.Message.ToString)

        End Try

    End Sub

 

End Class

 

4.  1)進入菜單 [項目]>[xxx屬性]>應用程序> 程序集信息  下在 使程序集COM可見 打勾

 

 

 

2) 進入 [項目]>[xxx屬性]>編譯  下  把 [為COM互操作] 打勾

3) 進入 [項目]>[xxx屬性]>簽名   下 把[為程序集簽名] 打勾 並 <新建…> 一個snk簽名 不設密碼也可

 

5,進入VS tools

 

 

關鍵: 用regasm命令注冊Net的dll

D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/BOS_ListEvent_PlugIns/BOS_ListEvent_PlugIns/bin/Release> regasm BOS_ListEvent_PlugIns.dll /tlb: TestPlugIns.Net.dll

 

 

6)結束,在BOS開發環境下調用 這個注冊后的dll即可

 

 

因為我建了一個窗體 所以多了一個 form這項

 

有沒有看多出工具欄這幾項菜單 上拉 斗地主 信息

點[上拉]出現的事件 如下圖

Select Case BOSTool.ToolName

            Case "shangla"

                '此處添加處理shangla 菜單對象的 Click 事件

                Dim form As New Form

                form.Show()

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM