PHP 错误 - 无法创建 COM 对象,类未注册

Tev*_*ldo 2 php com wamp

相关问题:

致命错误:创建 COM 对象时“类未注册”

在哪里可以找到可以在 Powershell 中创建的所有 COM 对象?

我目前正在将 PHP 网站从运行 Windows Server 2003 和 PHP 5.2 的服务器迁移到运行 Windows Server 2012 R2 和 PHP 5.6.35 的服务器。创建 COM 对象时,一个脚本给我一个“类未注册”错误:

$obj = new COM('DllName.ClassName') or die ("Unable to create COM object");
Run Code Online (Sandbox Code Playgroud)

我已经检查了上述问题,并可以确认:

  • COM DLL 在服务器上注册(通过检查注册表和使用 PowerShell)
  • PHP 的安装是 32 位的(PHP_INT_SIZE 为 4)。

我想我接下来要看的是上面第一个问题的答案中提到的“高级设置”对话框,但是我在哪里可以找到它?实际使用的服务器是 Apache,作为 WAMP 的一部分安装,但我认为问题出在较低级别。

Tev*_*ldo 5

修复方法是使用第一个链接问题链接的博客文章中描述的注册表黑客技术。完整的流程是:

  1. 将 ActiveX DLL 复制到C:\Windows\SysWOW64(不是 System32)。
  2. 打开命令提示符,然后注册 DLL:C:\Windows\SysWOW64>regsvr32 <DllName>
  3. 打开注册表(regedit在命令提示符下键入),然后在 .dll 中搜索 DLL 名称HKEY_CLASSES_ROOT\WOW6432Node\CLSID。该 DLL 应位于名为 的键中HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{GUID}。将 GUID 复制到剪贴板。
  4. 创建一个AppID在此键(而不是其任何子键)中命名的新字符串值。将值设置AppID为 GUID(包括大括号)。
  5. 创建一个新密钥:HKEY_CLASSES_ROOT\WOW6432Node\AppID\{GUID}.
  6. 在此新键中,创建一个名为 的字符串值DllSurrogate。将值留空。

现在应该可以使用 COM 函数从 PHP 创建 ActiveX 对象。