将 DLL 与 PHP 一起用于傻瓜

2022-01-14 00:00:00 dll xampp php ocx

我有一个项目需要使用 PHP 访问 DLL.服务器是Windows机器,Apache服务器由XAMPP提供.

I have a project that needs to access a DLL with PHP. The server is a Windows machine and the Apache server is provided by XAMPP.

我在网上阅读了多个答案,例如

I read multiple answers on the web like

  • 在 PHP 中使用 DLL?
  • php与dll通信?
  • 通过php调用dll
  • http://ca.php.net/manual/en/class.com.php
  • http://ca2.php.net/manual/en/book.w32api.php
  • http://www.talkphp.com/absolute-beginners/3340-php-how-load-com-dll-file.html

这是我在 HTA/Javascript 中调用 DLL 的方式:

Here is how I call the DLL in HTA / Javascript:

<object style="display:none" id="SOME_ID" classid="clsid:SOME_CLASS_ID" codebase="./somePath.dll"></object>

有人有工作示例吗?

这是我迄今为止在 PHP 中尝试过的:

Here is what I tried so far in PHP:

$obj = new COM('pathTo.dll');

DLL 信息:

  1. 使用 Delphi 编译
  2. 它(当然)是自制的
  3. 当我尝试使用 regsvr32
  4. 注册 DLL 时,我收到以下错误 找不到 DllRegister 服务器入口点

不用regsvr32注册就可以使用吗?

Can it be used without registering it with regsvr32?

推荐答案

创建 DLL 文件时,需要使用 模块定义文件.它将包含与此类似的内容:

When you create your DLL file, you need to use a module definition file. It will contain something similar to this:

;
;contains the list of functions that are being exported from this DLL
;

DESCRIPTION     "Simple COM object"

EXPORTS
                DllGetClassObject       PRIVATE
                DllCanUnloadNow         PRIVATE
                DllRegisterServer       PRIVATE
                DllUnregisterServer     PRIVATE

该定义允许 regsvr32 找到 DllRegisterServer 入口点.

That definition allows regsvr32 to find the DllRegisterServer entry point.

您可以尝试的另一个选项是将/n 标志传递给 regsvr32.

Another option you can try is to pass the /n flag to regsvr32.

Regsvr32 [/u] [/n] [/i[:cmdline]] dllname

Regsvr32 [/u] [/n] [/i[:cmdline]] dllname

/u - 注销服务器

/i - 调用 DllInstall 并传递一个可选的 [cmdline];与/u 一起使用时调用 dll 卸载

/i - Call DllInstall passing it an optional [cmdline]; when used with /u calls dll uninstall

/n - 不调用 DllRegisterServer;此选项必须与/i 一起使用

/n - do not call DllRegisterServer; this option must be used with /i

/s – 静音;不显示消息框(随 Windows XP 和 Windows Vista 添加)

/s – Silent; display no message boxes (added with Windows XP and Windows Vista)

最终,在您尝试使 DLL 与 PHP 一起工作之前,您需要确保您的 DLL 能够正常工作.

Ultimately, before you try to make a DLL work with PHP, you need to be sure your DLL works in general.

相关文章