使用DOTNET类将C#代码转换为Php

时间:2016-03-15 16:56:47

标签: c# php interop

我正在尝试使用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");

或者,如果有人知道另一种方法来做到这一点。谢谢大家

2 个答案:

答案 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");