加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

实现用VB.Net/(C#)开发K/3 BOS 插件的真正可行方法

发布时间:2020-12-17 07:29:11 所属栏目:百科 来源:网络整理
导读:转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶 K3 BOS 的插件官方是用 VB6 编写的,如果 ? 能用 .Net 下的语言工

转了这一篇文章,原来一直想用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,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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读