怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行

如何让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行
大家好
附件是用VB6封装的很简单的一个DLL,C1=A1+B1。已测试,在纯32位环境(包括WINXP+OFFICE2003和WIN7+OFFICE2010/2013)下可以正常执行,但在纯64位WIN7+OFFICE2010环境无法运行,虽然提示注册成功,但一调动类的过程,立刻弹出“运行时错误'429':ActiveX部件不能创建对象”,即使注册时指明
Shell "C:\Windows\SysWOW64\Regsvr32  " & Chr(34) & ThisWorkbook.Path & "\VBADLL.dll" & Chr(34)
结果告警不变,请高手指点一下,十分感谢
------解决方案--------------------
如果你的OFFICE 是64Bit的,你就别想运行起来。
------解决方案--------------------
VB6是32位的,我确信。
------解决方案--------------------
在64位Windows下:
64位dll在目录c:\windows\system32目录下;
32位dll在目录c:\windows\syswow64目录下;

------解决方案--------------------
引用:
5F 是不是把目录名说反了?
怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行

不是我说反了,而是微软弄反了!
怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行
------解决方案--------------------
哦,原来如此啊……
怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行
------解决方案--------------------
那就是证明,微软程序猿里也是一大群马大哈呀。
怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行

------解决方案--------------------
使用VB7支持64位的OFFICE2010,修改一些函数申明和变量,请参考:

64位VBA概览
让你的VBA宏兼容64位系统
------解决方案--------------------
64位进程无法加载32位DLL
反之亦然,只有一个特例就是32位进程可以加载ntdll.dll

------解决方案--------------------
这个问题很关键。
------解决方案--------------------
VB6是32位的,我确信。 
------解决方案--------------------
正常情况下,32位dll应该是可以在64位机器上运行的,之所以不能运行,可能是你的某些操作在64位机器上不兼容。

所以我觉得这个问题是不是可以这样解决。先用一个32位dll作为入口,在这个dll中判断系统的位数,如果是32位则加载对应的32位dll,如果是64位,则加载64位的dll。
------解决方案--------------------
这个问题不懂,学习中。
------解决方案--------------------
怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行
------解决方案--------------------
引用:
Quote: 引用:

5F 是不是把目录名说反了?
怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行

不是我说反了,而是微软弄反了!
怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行

syswow64 ==system Windows 32-bits on Windows 64-bit,
依然用system32是为了保持程序迁移的兼容性。system32出现时16位都非常流行。根本没考虑到64位会这么快普及。
------解决方案--------------------
vb6.0时,还没有 64位的 windows 。
------解决方案--------------------
这个貌似还有其他方法
------解决方案--------------------
office不建议用64位的。64位的office比32位的目前来看没有任何优势
------解决方案--------------------
这个应该不可以,VB6的时候还没有64位呢
------解决方案--------------------

ActiveX DLL 改成 ActiveX EXE 试试。

怎么让VB6封装出来的DLL能在纯64位WIN7+OFFICE环境中运行


------解决方案--------------------
learning
------解决方案--------------------
好深奥的问题
------解决方案--------------------
这个问题似乎应该反过来问:在 64 位系统下如果支持 32 位的 ActiveX DLL?

------解决方案--------------------
引用:
这个问题似乎应该反过来问:在 64 位系统下如果支持 32 位的 ActiveX DLL?

c:\windows\syswow64\regsvr32 c:\windows\syswow64\xxxxxxx.ocx
c:\windows\syswow64\regsvr32 c:\windows\syswow64\xxxxxxx.dll
------解决方案--------------------
很关键的问题
------解决方案--------------------
我记得当时也和楼主一样,满以为能兼容。
可是很遗憾,64位office是不能运行32位COM组件的,就目前来说是不行,至于以后就不清楚了。
vb6开发的COM组件是32位的,所以根本不能调用。
至于为什么,这里有一篇介绍,
http://www.cnbeta.com/articles/106641.htm

所以,目前我知道的唯一办法,就是使用VB2010开发ADD-IN外接程序,或者开发一个VSTO程序。




------解决方案--------------------
我就觉得office兼容问题是个无底洞,我估计楼主想兼容所有版本几乎不可能。
------解决方案--------------------
引用:
Quote: 引用:

在64位Windows下:
64位dll在目录c:\windows\system32目录下;
32位dll在目录c:\windows\syswow64目录下;


这个我知道,目前的真正的问不是WIN7是32位还是64位,SYSTEM32还是SYSWOW64的问题,真正的问题是VB6封装出来的DLL只能在32位OFFICE下运行,有没有什么别的软件或方法,可以封出同时适用32位和64位OFFICE使用的DLL文件????

我强烈推荐ADD-IN EXPRESS
------解决方案--------------------
64位不支持vb6了,不用费脑壳了。