office插件开发_[插件开发]用VB6开发一个插件同时给32位和64位Office使用

faf91f67b21aad5eb2f508391e2e29dc.png

VB6只能编译32位DLL

目前已经有部分用户开始使用64位Office了

用VB6给64位Office写插件将是一个痛苦的事

所以很多开发者都望而却步,在没有转.net正营的前提下,都会告知用户,产品不兼容64位office

此文的内容我研究了很久,用VB6开发64位Office的插件只能是进程外方案,进程内方案是不可能的

但是在实现时,又有两种方式:

1、ActiveX EXE

大致实现如下:

a.新建一个AX EXE工程,工程名TestEXE,加入一个类cCreate.cls,写入如下代码:

Public Function CreateInstance(ByVal ProgID As String) As Object Set CreateInstance = CreateObject(ProgID)End Function

虽然说Object的效率比较低,但是如果用Variant效率会更低

注册exe和dll后,在VBA中使用时只需要这样使用就好了:

#If Win64 Then '64位环境用ActiveX EXE中转一下 Dim exeProc As Object, cls as myClass Set exeProc = CreateObject("TestEXE.cCreate") Set cls = exeProc.CreateInstance("Dll工程名.myClass") cls.类的成员 (成员参数) Set cls = Nothing Set exeProc = Nothing #Else '32位环境直接用 Dim cls as myClass Set cls = CreateObject("DllName.myClass") cls.类的成员 (成员参数) Set cls = Nothing #End If

上面只是说了一个使用上的概念,真正要拿来开发Office插件,还需要你自己研究一下

2、纯ActiveX DLL方案

这个相比上面的方案,少了一个ActiveX EXE服务器,直接修改注册表,把ActiveX DLL当做进程外服务器使用,修改很简单。

Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOTWOW6432NodeCLSID{6FAF2F0E-AB26-4182-884E-4544025F8E3E}]"AppID"="{6FAF2F0E-AB26-4182-884E-4544025F8E3E}"[HKEY_CLASSES_ROOTWOW6432NodeAppID{6FAF2F0E-AB26-4182-884E-4544025F8E3E}]"DllSurrogate"=""[HKEY_CLASSES_ROOTSOFTWAREClassesAppID{6FAF2F0E-AB26-4182-884E-4544025F8E3E}]"DllSurrogate"=""

注意上面的6FAF2F0E-AB26-4182-884E-4544025F8E3E是你的类的classid

使用oleview看时,就是coclass上面的那个uuid

总结:以上两种方法都还只是概念,由于个人没有时间深入研究,就先发出来,有兴趣的同学自行研究,可以找我探讨

通过以上概念使用VB6去写64位Office插件,其实还需要一点研究:

比如:进程外COM实际上不能被跨进程调用界面,好就好在写插件需要用到的这两个接口IDTExtensibility2和AddinInstance实现基本功能时,其实不需要牵涉界面,界面部分可以另外来写。

——以上

——只是开拓一个新方向,给VB6发挥点余热。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值