2016-03-15 58 views
0

我試圖使用DOTNET將C#代碼轉換爲PHP,我從來不使用C#但是使用了很多PHP,因此,我將以基本的東西開始,如果有用的做轉換,那麼有下一個C#代碼片段。使用DOTNET類將C#代碼轉換爲Php

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'); 
?> 

,但在該行 「$棧=新DOTNET(」 mscorlib程序 「」 System.Text下。編碼 「);」

得到這個錯誤「致命錯誤:未捕獲的異常‘發出com_exception’有消息「未能實例.NET對象[的CreateInstance] [0x80131513]」,

然後尋找網頁,我看到需要一個完整的字符串配版和其他東西的DLL refered爲「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"); 

或者如果有人知道另一種方式來做到這一點。謝謝大家

回答

1

對於「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#編寫代碼,用一個spefic窄接口在php中使用。

+0

由於使用,U能告訴我如何能做到這一點,你回答修改後的行到「$ stack = new DOTNET(」mscorlib「,」System.Text「);」但得到了相同的,我需要知道該怎麼做才能知道這樣的DLL的完整字符串「CSharpCOM,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = beb607ae770f5750」 – pipook

+0

「System.Text」不是一個類,但一個名字空間,你也不能創建它的一個實例。創建一個System.Text.ASCIIEncoding的實例,正如我在答案中所顯示的那樣。 – NineBerry

+0

謝謝,我用你的例子,但又得到了另一個致命錯誤「致命錯誤:在第14行D:\ xampp \ htdocs \ dotnet \ ejemplo.php」中,就像這樣,行是「$ bytes = $ encoding- > GetBytes(「Hello World」);「,認爲我打算使用編譯器.cs中的.exe文件:( – pipook

0

我相信所有需要定義.dll的信息都可以在.dll中找到。你有沒有找到你的mscorlib.dll並查看它的文件細節?

您可能能夠在{Drive}/Windows/assembly文件夾下找到它。您可能需要安裝Msoft util才能正確查看程序集。一旦你可以查看通過Msoft工具組件,你就可以抓住公鑰標記和版本

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

,這正是我需要知道的,但不知道如何從dll讀取這些信息 – pipook