Я пытаюсь преобразовать код C # в php с использованием DOTNET, я никогда не использую C #, но много php, поэтому я начинаю с простых вещей: чтобы, если полезно выполнить преобразование, затем получить следующий фрагмент C # код.
using System.Text;
class AES
{
private byte[] _key;
private byte[] _iv;
public AES()
{
}
public AES(string keyBase, string iv)
{
_key = Encoding.ASCII.GetBytes(keyBase);
_iv = Encoding.ASCII.GetBytes(iv);
}
}
затем пытаюсь конвертировать только этот кусок, поэтому я делаю следующий в php
<?php
class Ejemplo{
public function FunctionName($value = '')
{
echo "Hello world!...";
//var_dump(\System\Text\Encoding::GetEncoding());
$stack = new DOTNET("mscorlib", "System.Text.Encoding");
var_dump($stack);
}
}
$eje = new Ejemplo();
$eje->FunctionName('nada');
?>
но в линии
«$ stack = new DOTNET (» mscorlib «,» System.Text.Encoding «);»
Получил эту ошибку «Неустранимая ошибка: необнаруженное исключение« com_exception »с сообщением« Не удалось создать экземпляр объекта .Net [CreateInstance] [0x80131513] »,
затем, ища сеть, я вижу, что нужна полная строка с версией и другими вещами для dll, ссылающейся на «System.Text.Encoding», мой вопрос в том, как узнать информацию для dll, чтобы можно было создать такую строку
$csclass = new DOTNET("CSharpCOM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=beb607ae770f5750", "CSharpCOM.CSharpCOMClass");
но для моего
$stack = new DOTNET("mscorlib", "System.Text.Encoding");
Или если кто-то знает другой способ сделать это. Спасибо всем
Для «mscorlib» вам не нужно указывать полное имя сборки вместе с культурой и версией, так как это одна из основных сборок .net, содержащая самые основные функции и являющаяся фиксированной частью среды выполнения .net.
System.Text.Encoding является абстрактным классом. Вот почему вы не можете создать экземпляр этого. В этом примере вы хотите использовать System.Text.ASCIIEncoding. Итак, создайте экземпляр этого класса напрямую:
$encoding = new DOTNET("mscorlib", "System.Text.ASCIIEncoding");
$bytes = $encoding->GetBytes("Hello World");
Следует отметить, что использование сборок .net из PHP с помощью «DOTNET» ограничено, поскольку позволяет только создавать экземпляры классов. Вы не можете использовать статические классы и перечисления, что означает, что некоторые из .net API недоступны.
Вы можете использовать рекламный ролик NetPhp библиотека вместо.
В качестве альтернативы, напишите код на C # со специфическим узким интерфейсом, который будет использоваться из php.
Я считаю, что вся информация, необходимая для определения .dll, доступна на самой .dll. Вы удосужились найти mscorlib.dll и просмотреть сведения о его файле?
Вы можете найти его в папке {Drive} / Windows / Assembly. Вам может потребоваться установить утилиту Msoft для правильного просмотра сборок. Как только вы сможете просматривать сборки с помощью инструмента Msoft, вы сможете получить токен открытого ключа и версию для использования в
$stack = new DOTNET("mscorlib", "System.Text.Encoding");