所以我的方案是旧服务器需要退休,但它上面的混合平台 Web 解决方案需要移植到新的 Windows 2012R2 服务器。我的背景在所涉及的技术方面没有太多经验,所以我很挣扎,而且所有相关的开发人员几年前都没有任何文档,如果不是更多的话。
经典的 ASP 网站有一个内部 DLL 的引用,我们称之为 IBase.dll。我使用 regsvr32 来注册它并通过一个产生的错误到另一个错误,我将这个错误归结为 IBase.dll 需要它自己的引用注册。
InternetBase error '800a01ad'
ActiveX component can't create object
/Secure/CaseDetails.asp, line 333
我设法找到了一个用 VB6 编写的 IBase.dll 项目文件版本。当我进入 Project>References 时,它有一些内部 .exes 的条目。现在,当我尝试在新服务器上对这些进行 regsvr32 注册时(来自 syswow64,虽然我都尝试过)我收到一个错误:
The module "D:\ibase\ibasehelper4.exe" was loaded but the entry-point DLLRegisterServer was not found.
Make sure that "D:\ibase\ibasehelper4.exe" is a valid DLL or OCX file and then try again.
在旧服务器上,我可以看到似乎有助于 DLL 查找这些 EXE 引用的注册表项。我怎样才能正确地尝试注册这些 EXE 以使它们对 IBase.dll 可用?甚至,我可以尝试哪些事情?
最佳答案
自从我上次使用它已经有一段时间了,但是 COM 对象*有两种形式:进程内和进程外。
DLL(和 OCX,对于大多数用途来说只是一个奇特的 DLL)在与调用代码相同的进程中运行,除非您使用 DCOM 并在另一台机器上运行,以及其他令人厌恶的地方。
COM EXE 是进程外的,涉及所有相应的编码和进程间通信开销。
正如 Marc 所指出的,您需要使用/regserver 标志调用 EXE 以加载相关的注册表项。它与 RegSvr32 对 DLL 所做的工作相同。
*故意滥用过去时。我敢肯定,现在一些不幸的人仍在创造新的。
关于vb6 - 将 VB6 引用注册到 EXE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36130455/