0

我有一个 20 多年前编写的 excel 插件的代码,我发现自己再次需要它。它在虚拟机中的 Windows XP 和 Excel 2003 中运行良好。在 VB6.0 IDE 中,我可以加载代码并制作我可以注册为 excel 加载项的 dll,并在虚拟框中的 Excel 2003 中使用它。我也可以使用 VB6 IDE 来调试它。我希望尽可能少地重写它,以便短期需要与使用当前 64 位版本 Excel 的组织中的一小部分人共享。它们处于锁定环境中,因此不能选择让它们都运行旧的 32 位 Excel 版本来实现此功能。

是否有允许编译为 64 位的 Visual Basic 版本?我找到了对听起来像是允许这样做的 VB7 IDE 的引用。如果它确实存在,是否有可能在任何地方获得它?它真的会制作一个可以与当前 64 位版本的 Excel 一起使用的加载项吗?

4

1 回答 1

0

您可以设置注册表项以允许 x64 加载 x32 库。

所以 COM 会忽略 EXE 文件中的位数。因此,任何 COM 客户端都可以加载任何 EXE 文件(反之亦然,尽管没人关心)。通过设置注册表项,您可以强制您的 DLL 进入 DLLHOST.exe。

COM 将 64 位存根加载到 Excel 中并与存根通信。据 Excel 所知,它已经加载了 64 位 dll。

一个问题是您无权更改一个注册表项。您必须取得所有权并授予自己添加条目的权限。与文件不同,没有内置工具可以自动执行此操作。

以下 reg 文件启用 MSScript 控件,它允许您将 VBScript 和 JScript 作为宏语言执行。微软想要杀死 VBScript 和 JScript 以及 MS Script Control。因此,为了兼容性,它只能作为 32 位 dll 使用。将宏语言添加到任何程序都需要不到一分钟的时间。与您必须付费使用的 VBA 形成对比。请注意需要 TakeOwnership 的一行

Windows Registry Editor Version 5.00
;MSScript.reg

[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
@="ScriptControl Object"
"AppID"="{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}"

[HKEY_CURRENT_USER\SOFTWARE\Classes\Wow6432Node\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
@="ScriptControl Object"
"AppID"="{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}"

;This one needs to be done manually
[HKEY_CURRENT_USER\SOFTWARE\Classes\Wow6432Node\AppID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
"DllSurrogate"=""

[HKEY_CURRENT_USER\SOFTWARE\Classes\AppID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
"DllSurrogate"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
@="ScriptControl Object"
"AppID"="{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
@="ScriptControl Object"
"AppID"="{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\AppID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
"DllSurrogate"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID\{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}]
"DllSurrogate"=""

参考在这里,但只有 DLLSurrogate 是您感兴趣的 - https://docs.microsoft.com/en-us/windows/win32/com/appid-key

更多的背景参考 - https://docs.microsoft.com/en-us/windows/win32/winprog64/process-interoperability

于 2022-02-02T03:58:13.457 回答