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发挥点余热。
|