web-dev-qa-db-ja.com

DLL With PHP= for Dummies

PHPでDLLにアクセスする必要があるプロジェクトがあります。サーバーはWindowsマシンであり、ApacheサーバーはXAMPPによって提供されます。

私はウェブで複数の回答を読んでいます

DLL in HTA/Javascript

<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. DLLをthe DllRegister Server entry point was not foundに登録しようとすると、次のエラーregsvr32が表示されます

regsvr32に登録せずに使用できますか?

16
David Laberge

DLLファイルを作成するときは、 モジュール定義ファイル を使用する必要があります。これには、次のようなものが含まれます。

;
;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-オプションの[cmdline]を渡してDllInstallを呼び出します。/uと一緒に使用すると、dllのアンインストールを呼び出します

/ n-DllRegisterServerを呼び出さない。このオプションは/ iと共に使用する必要があります

/ s –サイレント。メッセージボックスを表示しない(Windows XPおよびWindows Vistaで追加)

最終的に、DLLをPHPで動作させる前に、DLLが一般的に動作することを確認する必要があります。

14
Jeremy Harris

A DLL Linux/Apacheサーバーからアクセスできないため、プロジェクトはドロップされました。

1
David Laberge

私は同じ問題を抱えていて、いくつかの手順を修正しました:

  1. 管理者権限でコマンドラインを開き(Windows + R +タイプ 'cmd')、DLLファイルの場所にPATHを書き込みます。
    C:\Windows\system32\regsvr32 xwizards.dll(例です)
    「DLLRegisterServer success」と表示されるウィンドウ
  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";}
    

    これで、クラスの管理方法とDLLの機能がわかっている場合は問題ありませんが、画面にエラーマッサージが表示されないはずです


わからなかった場合はお知らせください。次回は頑張ります:)