私は PHP の初心者で、今日DOTNETクラスを発見しました。
そこで私はマニュアルを勉強し、Web をサーフィンしていくつかの例を見つけ、最終的にテスト アプリを作成しました。
- Framework 4.0 Client Profile を使用して新しい DLL を作成
- 厳密な名前のキーでアセンブリに署名した
- アセンブリを COM 可視としてマーク
これは私が書いたテストコードです
using System;
namespace CSharpCOM
{
public class CSharpCOMClass
{
public string Base64(string s)
{
return Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(s));
}
}
}
アセンブリをコンパイルし、GAC に登録しました ( gacutil /if fullpath\CSharpCOM.dll
)。
使えばgacutil /l CSharpCOM
分かる
La cache di assembly globale contiene gli assembly seguenti:
csharpcom, Version=1.0.0.0, Culture=neutral, PublicKeyToken=beb607ae770f5750, processorArchitecture=MSIL要素数 = 1
だから、すべてがうまくいくようです。
次に、この基本的なphpを書きました:
<?php
try{
$csclass = new DOTNET("CSharpCOM, Version=1.0.0.0, Culture=neutral, " .
"PublicKeyToken=beb607ae770f5750",
"CSharpCOM.CSharpCOMClass");
echo $csclass->Base64("Test string"),"\n";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
?>
何をしようとしても、Apache でホストされているページを読み込んでいます ( http://localhost/test01/dotnet.php
) いつも取得します
キャッチされた例外: .Net オブジェクトのインスタンス化に失敗しました [CreateInstance] [0x80070002] 不可能なファイル固有のファイルです。
翻訳可能性: 指定されたファイルが見つかりません
もう 1 つ: いくつかの例 (ここでは非常に基本的なもの) を使用すると、アセンブリ (登録されている場合) は で見つかるはず%windir%\assembly
ですが、でしか見つけることができません%windi%\Microsoft.NET\assembly\GAC_MSIL\CSharpCOM\v4.0_1.0.0.0__beb607ae770f5750
: これは正しいですか? 最初のディレクトリに置かないのはなぜですか?
詳細: 別のフレームワーク プロジェクトを作成して .NET 参照を追加しようとすると、アセンブリが見つかりません。これは、このアセンブリを PHP から読み込めないことに関係していますか?
最後のメモ: Windows XP Professional SP3 32bit と Windows Seven Enterprise 64bit で試してみました
更新:
これは機能します:
$form = new DOTNET('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', 'System.Windows.Forms.Form');
しかし、これはしません:
$form = new DOTNET('System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', 'System.Windows.Forms.Form');`
PHP がフレームワーク 2.0 アセンブリしかロードできない可能性はありますか?