php調用.net生成的.dll文件


       這幾天,一直在做DES ecb模式的加解密,剛用.net實現了加解密,完了由於需要又要轉型成PHP代碼,費了九牛二虎之力單獨用PHP沒能實現,結構看到一篇php直接調用c#里生成的.dll文件的方法,才得以實現。

使用C#創建php可以調用的dll

1. 創建一個 C# Class Library ,命名為:HelloWorld

2. 在解決方案資源管理器里選擇屬性,在點選左邊的 "應用程序"(就是第一個tab) , 然后點擊 程序集信息按鈕 ,在彈出的Dialog中, 必須在底部勾上: 使程序集必須可見!否則 , 這個dll將不能以COM方式訪問 .(  也可以在代碼中的類聲明中寫上[ComVisible(true)] , 效果一樣,需要增加using System.Runtime.InteropServices;引用)

 

3. 創建強命名簽名文件並使用
  使用vs.net的“Vsitual Studio Tools”-->Vistual Studio .Net命令提示,輸入 sn -k d:\HelloWorld.snk回車即創建了強命名簽名文件
  打開項目的屬性,點選左邊‘簽名’選項卡,勾上為程序集簽名,在 強名稱密鑰文件 下拉框:處選擇<瀏覽> 選擇剛才創建的HelloWorld.snk文件

別忘了保存哦!

4. 創建類庫並編譯成.dll文件

 

[csharp]   view plain copy
 
  1. namespace HelloWorld  
  2. {  
  3.     [ComVisible(true)]  
  4.     public class Hello  
  5.     {  
  6.         public string Write()  
  7.         {  
  8.   
  9.             return "Hello World";  
  10.         }  
  11.     }  
  12.       
  13. }  


5. 找到dll文件夾路徑 ,然后使用vs.net的“Vsitual Studio Tools”-->Vistual Studio 命令提示符
進入該dll文件夾下輸入: regasm  HelloWorld.dll<回車>。
這時候,這個.dll的.net程序集就變成一個標准的Com組件了,但是還不能用,必須讓它變成全局Com組件.
這個regasm 實用程序將創建一個類型庫並在 Windows 注冊表中對其進行注冊,以使 PhysServer2.dll 中的類對 COM 客戶端可用 .
需要做下面步驟
將程序集添加到全局程序集緩存中
進入提示符窗口,輸入: gacutil /I HelloWorld.dll<回車>  
這時,你的這個dll就被復制到全局程序集緩存中了.也就是說無論在這個電腦的哪個硬盤上都可以使用此dll組件了.
如果不進行強命名簽名,這一步會提示加載失敗
或許你的這一步會出錯,提示你要提供管理員的權限,不要着急,你可以按照下面的步驟做:

1.)啟動任務資源管理器(Ctrl+Shift+Esc),找到explorer.exe,結束進程,不用害怕,系統不會由於此種操作而崩潰,它會使現有的窗口隱藏(像工具欄什么的),但不用擔心程序並沒有停止

2.)選擇文件-->新建任務(運行),在彈出的創建新任務文本框里輸入‘explorer.exe’,另外下面的復選框一定要勾選,這樣才會使所有用戶擁有管理員的權限,完了,繼續執行上面的第五步,沒問題了!

PHP測試

 

[php]   view plain copy
 
  1. <?php  
  2. $r=new Com("HelloWorld.Hello");  
  3. $s=$r->Write();  
  4. echo $s;  
  5. ?>  

 ok,搞定!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM