VB 6.0 给64位Office写插件

开发背景

http://modthemachine.typepad.com/my_weblog/2009/10/visual-basic-6-add-ins-and-64-bit.html这篇外文介绍了Visual Basic 6给64位的程序开发加载,其思路是:

  • 64-bit Windows can run both 32-bit and 64-bit applications (exe’s and dll’s).
  • Visual Basic 6 can only create 32-bit applications (exe’s and dll’s).
  • A 64-bit exe can only load 64-bit dll’s. It cannot use 32-bit dll’s.
     VB6.0开发的dll不能在64位的Office的进程加载,其变通思路是生成标准的32-bit exe则能正常运行。

开发环境

 Win7 64-bit + Excel 2010 64-bit + Visual Basic 6

开发步骤

第一步:建立标准的外接程序

在这里插入图片描述

第二步:修改项目编译属性

在这里插入图片描述
 修改项目类型成 ActiveX EXE然后保存,清空Connect下面的全部代码,并删除生成的默认窗体。然后保存项目,关闭VB6.0。

第三步:修改项目注册时,注册表的位置

 该步骤非常重要,找到该项目 Connect.Dsr文件,然后用记事本打开,修改成下面样式:在这里插入图片描述
 修改成上面样子后,保存关闭,再次打开该项目。

第四步:编写插件功能

 引用对应的版本的Excel库
在这里插入图片描述
在这里插入图片描述

第四步:设置调试启动程序

在这里插入图片描述
 编译生成.exe,运行启动进行调试。

注意事项:

 虽然该exe能在32和64位的Excel上运行,但其本质上还是32位的,在调用Window API的时候,牵涉到指针问题时,需要注意,因为64位程序的指针类型是8字节的整数(int64)的整数,在VB6.0整数long只有4字节,这样会地址错误可能会导致程序奔溃。其解决办法有:
 第一种:用IDL接口定义描述语言定义一个 __int64位的数据给该程序使用。
 第二种:VB 6.0 有Currency类型(8-byte),但我们知道该类型是一个小数类型,但在底层,COM自动化对所有货币型整数把小数点左移四位,要把其看成整数只要乘以10000就可以了。
 如有兴趣交流加群:794568082

猜你喜欢

转载自blog.csdn.net/qq_25686631/article/details/112999424
今日推荐