Преобразование кода C # в Php с использованием класса DOTNET

Я пытаюсь преобразовать код 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");

Или если кто-то знает другой способ сделать это. Спасибо всем

0

Решение

Для «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.

1

Другие решения

Я считаю, что вся информация, необходимая для определения .dll, доступна на самой .dll. Вы удосужились найти mscorlib.dll и просмотреть сведения о его файле?

Вы можете найти его в папке {Drive} / Windows / Assembly. Вам может потребоваться установить утилиту Msoft для правильного просмотра сборок. Как только вы сможете просматривать сборки с помощью инструмента Msoft, вы сможете получить токен открытого ключа и версию для использования в

$stack = new DOTNET("mscorlib", "System.Text.Encoding");
0

По вопросам рекламы [email protected]