概述
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果 能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V转了这一篇文章,原来一直想用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.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
‘定义 ListEvents 接口. 必须具有的声明,以此来获得事件
Private WithEvents m_ListInterface As ListEvents
Public Sub Show(ByVal oListInterface As Object)
‘ListEvents 接口实现
m_ListInterface = oListInterface
End Sub
Private Sub Class_Terminate()
‘释放接口对象
End Sub
Private Sub m_ListInterface_MenubarClick(ByVal BOSTool As K3ClassEvents.BOSTool,ByRef Cancel As Boolean) Handles m_ListInterface.MenubarClick
On Error Resume Next
Case "shangla"
Dim form As New Form
form.Show()
Case "dizhu"
Case "config"
MsgBox("此处添加处理config 菜单对象的 Click 事件 config")
Case "Info"
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")
Case Else
End Select
End Sub
Private Sub m_ListInterface_MenubarInitialize(ByVal oMenubar As K3ClassEvents.Menubar) Handles m_ListInterface.MenubarInitialize
Try
Dim oTool As K3ClassEvents.BOSTool
Dim oBand As K3ClassEvents.BOSBand
‘*************** 开始新增 BOS 菜单 ***************
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) ‘将菜单对象插入指定工具栏
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) ‘将菜单对象插入指定工具栏
oTool = oMenubar.BOSTools.Add("config")
With oTool
.Caption = "设置"
.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,oTool) ‘将菜单对象插入指定工具栏
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
有没有看多出工具栏这几项菜单 上拉 斗地主 信息
点[上拉]出现的事件 如下图
Case "shangla"
Dim form As New Form
form.Show()
总结
以上是编程之家为你收集整理的实现用VB.Net/(C#)开发K/3 BOS 插件的真正可行方法全部内容,希望文章能够帮你解决实现用VB.Net/(C#)开发K/3 BOS 插件的真正可行方法所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。