轉了這一篇文章,原來一直想用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
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
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")
.Caption = "鬥地主"
.TooltipText = "來休閑一下吧"
.Description = "鬥地主"
.ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/icon.ico"
oBand.BOSTools.InsertBefore("mnuBackData", oTool) '将菜單對象插入指定工具欄
'新增 config 菜單對象,并設定屬性
oTool = oMenuBar.BOSTools.Add("config")
With oTool
.Caption = "設定"
.TooltipText = "設定自定義執行的SQL"
.Description = "執行"
.ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/ProgressSuccess.ico"
'新增 Info 菜單對象,并設定屬性
oTool = oMenuBar.BOSTools.Add("Info")
.Caption = "資訊"
.TooltipText = "顯關相關資訊"
.Description = "資訊"
.ToolPicture = "D:/Documents and Settings/Administrator/My Documents/Visual Studio 2008/Projects/ico/server.ico"
'*************** 結束新增 BOS 菜單 ***************
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
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
網名:浩秦;
郵箱:root#landv.pw;
隻要我能控制一個國家的貨幣發行,我不在乎誰制定法律。金錢一旦作響,壞話隨之戛然而止。