C# クラス ライブラリ アセンブリを作成し、PHP からメソッドを呼び出せるように COM で表示できるようにしました。これは以前は正常に機能していましたが、Windows Server 2008 サーバーにインストールしようとすると、「クラスが登録されていません」というエラーが表示され続けます。
依存関係の問題を排除するために、C# で小さなテスト クラス ライブラリを作成しました。クラス ライブラリは任意の CPU 用に構築されており、COM に表示されます (AssemblyInfo.cs で COMVisible を true に設定します)。テスト クラス ライブラリには、1 つのメソッドを持つ 1 つのクラスのみが含まれます。クラスは TestLib と呼ばれ、名前空間も TestLib と呼ばれます。このメソッドは Test と呼ばれ、文字列のみを返します。
- TestLib.dll をビルド - Windows Server 2008 マシンにコピー - dll を次のように登録: regasm /codebase TestLib.dll - regasm ツールが成功メッセージを返す - PHP では単純に新しい COM インスタンスを作成します。
try
{
$test = new COM("TestLib.TestLib");
}
catch (Exception $e)
{
die($e->getMessage());
}
- ブラウザまたはコマンドライン (php -f test.php) からこのテスト スクリプトを呼び出すと、どちらの場合も「クラスが登録されていません」というエラーが表示されます。
また、gacutil -i を使用して TestLib を GAC に追加しようとしましたが、役に立ちませんでした。まだクラスが登録されていないエラーです。
次に、ターゲット フレームワークとして 4.0 ではなく .NET 2.0 を使用してテスト ライブラリをコンパイルしようとしましたが、同じ結果になりました。ちなみにサーバーには.NET Framework 4.0がインストールされています。
何か案は?