编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

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

wxchong 2024-08-30 04:01:52 开源技术 13 ℃ 0 评论

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_ROOT\WOW6432Node\CLSID\{6FAF2F0E-AB26-4182-884E-4544025F8E3E}]
"AppID"="{6FAF2F0E-AB26-4182-884E-4544025F8E3E}"
[HKEY_CLASSES_ROOT\WOW6432Node\AppID\{6FAF2F0E-AB26-4182-884E-4544025F8E3E}]
"DllSurrogate"=""
[HKEY_CLASSES_ROOT\SOFTWARE\Classes\AppID\{6FAF2F0E-AB26-4182-884E-4544025F8E3E}]
"DllSurrogate"=""

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

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

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

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

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

——以上

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表