Я довольно новичок в PHP, и сегодня я открыл класс DOTNET .
Поэтому я изучил руководство, просмотрел веб-страницы, чтобы найти пример и, наконец, написал свое тестовое приложение:
Это тестовый код, который я написал
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 = MSILNumero di elementi = 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] Impossibile trovare il file specificato.
Перевод может быть: невозможно найти указанный файл
Еще одна вещь: используя некоторый пример (здесь очень простой), я прочитал, что моя сборка (когда зарегистрирована) должна быть найдена на %windir%\assembly
, но я могу найти ее только в %windi%\Microsoft.NET\assembly\GAC_MSIL\CSharpCOM\v4.0_1.0.0.0__beb607ae770f5750
: это правильно? Почему бы мне не включить его в первый каталог?
Еще: если я создаю другой проект framework и попытаюсь добавить ссылку .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 может загружать только сборки Framework 2.0?