實現用VB.Net/(C#)開發K/3 BOS 外掛程式的真正可行方法

來源:互聯網
上載者:User

標籤:type   obj   組成   事件   imp   ase   適合   獲得   int   

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

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()

 

 

 

實現用VB.Net/(C#)開發K/3 BOS 外掛程式的真正可行方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.