使用DLL与PHP的傻瓜

问题描述 投票:15回答:3

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

我在网上看到了多个答案

以下是我在HTA / Javascript中调用DLL的方法:

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

有人有一个有效的例子吗?

这是我到目前为止在PHP中尝试的内容:

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

有关DLL的信息:

  1. 使用Delphi编译
  2. 它(当然)是自制的
  3. 当我尝试使用the DllRegister Server entry point was not found注册DLL时,我得到以下错误regsvr32

它可以在没有用regsvr32注册的情况下使用吗?

php dll xampp ocx
3个回答
13
投票

创建DLL文件时,需要使用module definition file。它将包含类似于此的内容:

;
;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入口点。

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

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

/ u - 取消注册服务器

/ i - 调用DllInstall传递一个可选的[命令行];与/ u一起使用时调用dll uninstall

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

/ s - 沉默;不显示消息框(添加了Windows XP和Windows Vista)

最后,在尝试使用PHP工作DLL之前,您需要确保您的DLL一般工作。


1
投票

无法从Linux / Apache服务器访问DLL。因此该项目下降。


0
投票

我有同样的问题,我修复了一些步骤:

  1. 在管理员权限中打开命令行(windows + r + type'cmd')将PATH写入您的dll文件: C:\Windows\system32\regsvr32 xwizards.dll(这是例子) 一个窗口显示“DLLRegisterServer成功”
  2. 如果你是com_dotnet扩展,检查你的phpinfo()
  3. 现在写入您的PHP代码: try { $dll = new COM('<theNameOfDllFile>.<NameOfTheClass>'); //without extension '.dll' for theNameOfDllFile $dll->Function(); } catch(Exception $e){ echo 'error: ' . $e->getMessage(), "\n";} 现在,如果你知道如何管理你的课程和你的功能,那就没事了,但是你的屏幕上不应该出现错误按摩

如果我不清楚,请告诉我,下次我会尽力:)

© www.soinside.com 2019 - 2024. All rights reserved.