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

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

  1. vue使用tradingview开发K线图相关问题

    vue使用tradingview开发K线图相关问题 1.TradingView中文开发文档https://b.aitrade.ga/books/tradingview/CHANGE-LOG.html2 ...

  2. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(二)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2339490.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  3. IDEA Plugin,写一个看股票指数和K线的插件

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 没招了,不写点刺激的,你总是不好好看! 以前,我不懂.写的技术就是技术内容,写的场景 ...

  4. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义

    Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...

  5. Notepad++进行php开发所必需的插件

    Notepad++进行php开发所必需的插件有那些呢? 1. Compare: 可以用来比较两个文件不同之处. 2. Explorer:文件浏览器插件,包含收藏夹.Session保存功能.可与NppE ...

  6. 我利用网上代码开发的JQuery图片插件

    我利用网上代码开发的JQuery图片插件 代码如下 (function($){ $.fn.FocusPic = function(options){ var defaults = { interval ...

  7. Cordova - 与iOS原生代码交互2(使用Swift开发Cordova的自定义插件)

    在前一篇文章中我介绍了如何通过 js 与原生代码进行交互(Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)),当时是直接对Cordova生成的iOS工程项目进行编辑操作的(添加 ...

  8. (转)jQuery Mobile 移动开发中的日期插件Mobiscroll 2.3 使用说明

    (原)http://www.cnblogs.com/hxling/archive/2012/12/12/2814207.html jQuery Mobile 移动开发中的日期插件Mobiscroll ...

  9. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

随机推荐

  1. android屏蔽系统锁屏的办法

    最近在开发一个第三方锁屏,使用中需要屏蔽系统锁屏,故代码如下: 在第三方锁屏的服务中onCreate()方法中(第三方锁屏服务启动时关闭一次系统锁屏服务即可) KeyguardManager mKey ...

  2. C++如何禁止对象的复制操作

    最容易想到的是将拷贝构造函数与赋值函数声明为private.但是,private只是说外部不能直接调用,但是可以间接通过类的成员函数与友元函数对其访问.那么怎么办呢? ---->在类中,允许声明 ...

  3. 【Linux】CentOS7.0下安装JDK环境

    写在前面:此次试验是在CentOS7上面安装的,亲测成功. 所需工具:JDK1.8安装包,xftp 具体步骤: 1,首先使用xftp连接到自己的虚拟机,然后查看是否有"/usr/java/j ...

  4. requests库入门11-重定向和请求历史

    默认情况下,除了head请求,requests会自动处理重定向 重定向就是会把url重新指定到另一个.比如github,使用http会自动重定向到https.一些公司也会使用网关啥的做重定向. r = ...

  5. 题解-PKUWC2018 Minimax

    Problem loj2537 Solution pkuwc2018最水的一题,要死要活调了一个多小时(1h59min) 我写这题不是因为它有多好,而是为了保持pkuwc2018的队形,与这题类似的有 ...

  6. 带你十分钟快速构建好 SpringBoot + SSM 框架

    目前最主流的 java web 框架应该是 SSM,而 SSM 框架由于更轻便与灵活目前受到了许多人的青睐.而 SpringBoot 的轻量化,简化项目配置, 没有 XML 配置要求等优点现在也得到了 ...

  7. HDU contest808 ACM多校第7场 Problem - 1008: Traffic Network in Numazu

    首先嘚瑟一下这场比赛的排名:59 (第一次看到这么多 √ emmmm) 好了进入正文QAQ ...这道题啊,思路很清晰啊. 首先你看到树上路径边权和,然后还带修改,不是显然可以想到 树剖+线段树 维护 ...

  8. oracle11g自动内存管理

    Oracle一直不停的在为Orace数据库的自动化管理努力着,11G中的自动内存管理是Oracle数据库中又一新的里程碑,通过新参数MEMORY_TARGET 来代替PGA和SGA的配置,ORACLE ...

  9. html5 - drag 拖拽

    参考资料: 张鑫旭             : http://www.zhangxinxu.com/wordpress/2011/02/html5-drag-drop-%E6%8B%96%E6%8B% ...

  10. Jenkins pipeline概念理解

      1.Jenkins Pipeline总体介绍 Pipeline,简而言之,就是一台运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程 ...