ホームページ  >  記事  >  バックエンド開発  >  php comコンポーネントのエラー問題を解決する方法

php comコンポーネントのエラー問題を解決する方法

藏色散人
藏色散人オリジナル
2021-03-10 10:33:323325ブラウズ

php com コンポーネント エラーの解決策: 1. php.ini の構成「com.allow_dcom」と「php_com_dotnet.dll」を変更します; 2. vs2013 を使用して COM コンポーネントを作成します。

php comコンポーネントのエラー問題を解決する方法

#この記事の動作環境: Windows7 システム、PHP7.1、Dell G3 コンピューター。

PHP が COM コンポーネントのロードに失敗する理由とその解決策

個人的には、他のプログラミング言語のインターフェイスを呼び出す最も便利な方法php の「COM コンポーネントを使用する」です。最近PHPに触れ始めたのですが、C言語で書かれたCOMコンポーネントを呼び出す勉強をしていたところ、「COMオブジェクトの作成に失敗しました」というエラーに遭遇し、解決するまでにかなり苦労しました。

php の上位バージョンでは、COM サポートを手動で有効にする必要があります。基本的に、php.ini の設定を com.allow_dcom = true および extension=php_com_dotnet.dll に変更します。 。これがエラーであれば、簡単に解決できます。実際、このような設定ミスをする人はほとんどいないと思いますが、WPS や Word コンポーネントを読み込んでテストすることで、COM コンポーネントのサポートが正常かどうかをテストできると言っている人が多いのですが、権限の問題があるため、このテスト方法は使用できません。あまり実用的ではありませんが、使いやすいです。その後、http://php.net/manual/zh/class.com.php ドキュメントの説明で $db = new COM("ADODB.Connection",NULL, 65001); を見つけました。テスト後、これは、私が作成した COM コンポーネントに何か問題があるに違いないことを示しており、実際にそのとおりであることが判明しました。

C で書かれた COM コンポーネントを PHP で読み込む例は以前インターネット上にたくさんありましたが、PHP のバージョンが低すぎるためか、そのようなコンポーネントの作成方法はphp5.2より前のバージョンを使用している場合は、これが正しい可能性があります。私はphp5.5を使用していますが、誤解されました。

私の PHP バージョンは 5.5.12 で、COM コンポーネントの作成に vs2013 を使用しています。プロセスは次のとおりです:

1. 起動バーで vs2013 を見つけ、右クリックして開きます管理者権限があるため、管理者IDを使用します。後でCOMコンポーネントを登録するときに便利なのでオンにします。 c で新しい ATL プロジェクト

php comコンポーネントのエラー問題を解決する方法

2 を作成し、[完了] をクリックし、プロジェクトを右クリックしてクラスを追加し、[ATL COM 10] を選択します。

php comコンポーネントのエラー問題を解決する方法

#3. プロジェクトを右クリックしてクラスを追加します。ここが最も重要な点です。右下のProgIDは手動で追加する必要があります。形式は「プロジェクト名.略称」です。プロジェクト名は生成されるDLLの名前です。ロード時にもこのように記述されます。 2 番目の項目はクラス名ではなく略語です。ここの書き方を間違えると、コンポーネントは登録できてもPHP上で認識されなくなります。

php comコンポーネントのエラー問題を解決する方法

#4. Itest にメソッドを追加します。詳しくは書きませんが、次のように追加しました [推奨学習: "

PHPビデオ チュートリアル>>]

STDMETHODIMP Ctest::add(LONG a, LONG b, LONG* c)
 {
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO:  在此添加实现代码
*c = a + b;
return S_OK;
 }

5 を実行し、コンパイルしてコンポーネントとして自動的に登録し、Apache サービスを再起動します。 PHP スクリプトでは次の呼び出しが行われます。

<?php
$conn = new COM("ATLProject3.test") or die("Cannot start ADO"); $com = 2; $conn->add(10, 2, $com); echo $com;  ?>

「コンポーネント名.略語」の形式が正しいことに注意してください。オンラインの例では、

"コンポーネント名.クラス名" です。バージョンの問題である可能性があります。とにかく、私の呼び出しは失敗しました。

6. PHP プロジェクト ディレクトリをブラウザに入力すると、COM コンポーネントが正常に読み込まれたことが表示されます。COM コンポーネントは、次のように 10 プラス 2 の出力を作成するために正常に使用されています。 12.

php comコンポーネントのエラー問題を解決する方法

以上がphp comコンポーネントのエラー問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。