php が com コンポーネントを呼び出せない問題の解決策: 1. php のバージョンと必要なシステム ツールを確認します; 2. php.ini を設定して "com.allow_dcom = true" を有効にします; 3. com を有効にしますphpの関数または「php_com_dotnet.dll」が正常に読み込まれたかどうかを確認してください。
このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。
php が com コンポーネントを呼び出せない場合はどうすればよいですか? PHP リファレンス COM コンポーネントの落とし穴記録
最近、作業項目に「奇妙なジョブ」が出現しました。既存の PHP プロジェクトに機能を追加する必要があり、それに必要なプロジェクトとソース コードが必要です。関数を実装する プロジェクトもありますが、これは非常に簡単です。私は PHP をほとんど使用しませんが、これが最も重要な「制限要因」ではありません。頭の痛いのは、関数ライブラリが .NET Framework を使用して実装されていることです。データ形式には多くの調整があり、比較的複雑です。これは関数ロジックのマニュアルではないため、PHP でコピーするのは困難です。したがって、php で .NET のダイナミック ライブラリを直接参照することが、「タスク」を完了するための鍵となっています。
インターネット上の多くの先輩がこの問題を記録していますが、彼らはひょうたんをコピーすることに失敗しています。この記事は「」にあります。肝臓の奇妙な仕事」 「その過程で、私たちはレコードに遭遇し、記入しました
COM コンポーネント動的ライブラリの生成
COM コンポーネント (COM コンポーネント) は、Microsoft によって開発されたソフトウェア開発技術です。その本質は、アプリケーション、オペレーティング システム、およびその他のコンポーネントにサービスを提供できる、いくつかの小さなバイナリ実行可能プログラムです。 PHP でサードパーティのダイナミック ライブラリを参照する場合は、新しい COM("Component.class") メソッドを使用する必要があり、コンポーネントは COM コンポーネントである必要があります (
1)。 Windows クラスを構築するライブラリ プロジェクト
どのバージョンの Framework であっても、[Windows] タブでクラス ライブラリ プロジェクトを見つけることができるはずです
このようにして、Properties\AssemblyInfo.cs ファイルが作成されます。プロジェクトのデフォルトであり、プロジェクト セットに必要な情報が記録されます。情報
2. ターゲット フレームワークは一致する必要があります
プロジェクトの作成時にフレームワークを選択できます
後で調整する場合は、[プロジェクト プロパティ] > [アプリケーション] でターゲットを選択できます。フレームワークに変更を加えます
後で DLL を登録するときにフレームワークが一貫している必要があることに注意してください
3. COM コンポーネントを表示する
Properties\AssemblyInfo.cs ファイルで、ComVisible を次のように変更します
[assembly: ComVisible(true)]
4. 署名を設定し、厳密な名前のキーを設定するには
Project [プロパティ]>[署名] で、[アセンブリに署名する] をチェックし、下の [アセンブリに署名する] を選択します。[厳密な名前のキー ファイル]
に新しいキー ファイルを作成して生成し、対応する dll ファイルを見つけます。 bin\Debug ディレクトリ
#5. 埋め込むことができないダイナミック ライブラリがある場合プロジェクト フレームワークのバージョンが低い場合、または 参照されるライブラリに必要な機能が欠けている場合相互運用性のために、つまり、参照されたライブラリを相互運用性を備えて埋め込むことはできません その場合、依存する DLL も後続の登録やその他の操作を実行する必要がありますDLL を登録するサーバーシステム レベルの操作が含まれるため、多くの落とし穴があります...1. PHP バージョンを確認します個人的にテストされたバージョン 5.3.22 は利用できません。 5.4.5が利用可能ですので、バージョン5.4以降を使用してみてください現在phpの最新バージョンはバージョン8.0ですが、今も同じかはわかりません操作方法2必要なシステム ツールを確認します。gacutil と regasm という 2 つのツールが必要で、どちらもフレームワークのバージョンと一致する必要があります。つまり、生成された COM 使用されているフレームワークのバージョンコンポーネントの dll については? ここで、対応するバージョンのツールを使用する必要もあります。通常、Windows システムには組み込みの regasm ツールが必ずあります。ディレクトリ パス (例:##) #C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe
64 ビット システムに適用されている場合は、Framework64 ディレクトリに移動します。それ以外の場合は、Framework ディレクトリを使用して、対応する Framework フレームワークのバージョン番号を選択します。そこに RegAsm.exe ファイルがあるはずです。
gacutil ツールは Microsoft にあります。提供された Windows SDK が含まれています。インストールしていない場合は、クリックして公式 Web サイトからダウンロードできます。
デフォルトのインストール後、ツールはFrameworkd 4.0 より前のバージョンのパス。
C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\gacutil.exe
バージョン 4.0 が必要な場合は、パス はい、
c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\gacutil.exe
3。php.ini を設定します。
Enable com.allow_dcom = true
extension_dir ディレクトリに php_com_dotnet.dll ファイルがあることを確認してください
extension=php_com_dotnet.dll
を有効にするか追加します4. DLL のキャッシュと登録
64 ビット システム、バージョン 4.0 の my.dll を例に挙げます。
生成された最初の dll を c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 にコピーします。 Tools\ ディレクトリ
を c:\Program Files\Microsoft SDKs\Windows\v7 ディレクトリに移動します。 .1\Bin\NETFX 4.0 Tools\ の下にある gacutil /i my.dll
を実行して、ディレクトリに移動しますC:\Windows\Microsoft.NET\Framework64\v4.0.30319\ を実行し、regasm my.dll
5. DLL の登録を解除します
#64 ビット システム、バージョン 4.0 my.dll を使用します。例としてディレクトリ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ に移動し、regasm my.dll /unregisterを実行します。ディレクトリ c:\Program に移動します。 Files\Microsoft SDKs\Windows\v7.1\Bin\NETFX 4.0 Tools\ を実行して gacutil /u myPHP が COM コンポーネントを呼び出します
上記の内容の後にが正しく設定されていれば、PHP ファイルで呼び出すことができます。メソッドは次のとおりです。
$comClass = new COM('namespace.className'); $comClass -> methodName();は、COM メソッドが存在しないことを示すプロンプトを表示するため、COM メソッドが有効になっているかどうかを検討する必要があります。php の com 関数、またはphp_com_dotnet.dll が正常にロードされたかどうか
dll を呼び出す方法がないか、dll が登録されていないことを示すメッセージが表示されます。dll ファイルが正常に登録されているかどうかを検討する必要があります。
推奨学習: 「PHP ビデオ チュートリアル」 "
以上がPHP が COM コンポーネントを呼び出せない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。