我正在尝试使用DOTNET将C#代码转换为php,我从不使用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 :(得分:1)
对于“mscorlib”,您不需要提供具有文化和版本的完整程序集名称,因为这是.net的核心程序集之一,包含最基本的功能,并且是.net运行时的固定部分
System.Text.Encoding是一个抽象类。这就是为什么你不能创建它的实例。在该示例中,您要使用System.Text.ASCIIEncoding。因此,直接创建该类的实例:
$encoding = new DOTNET("mscorlib", "System.Text.ASCIIEncoding");
$bytes = $encoding->GetBytes("Hello World");
应该注意的是,在“DOTNET”的帮助下使用PHP的.net程序集是有限的,因为它只允许您实例化类。您不能使用静态类和枚举,这意味着某些.net API是遥不可及的。
您可以使用商业NetPhp库。
或者,使用从php中使用的特殊窄接口在C#中编写代码。
答案 1 :(得分:0)
我相信.dll所需的所有信息都可以在.dll上找到。你有没有找到你的mscorlib.dll并查看它的文件详细信息?
您可以在{Drive} / Windows / assembly文件夹下找到它。您可能需要安装Msoft util才能正确查看程序集。一旦您可以通过Msoft工具查看程序集,您就可以获取要在
中使用的公钥标记和版本$stack = new DOTNET("mscorlib", "System.Text.Encoding");