有的時候,我們需要在php中利用到其他語言編寫的dll類庫,如C#編寫的dll,方法就是利用PHP new COM方法來調用,在調用之前先要把dll庫註冊並把程式集放入到全域緩衝中。
1. 建立一個 C# Class Library ,命名為:HelloWorld
2. 開啟項目的屬性,在點選左邊的 "Application"(就是第一個tab) , 然後點擊 Assembly Information 按鈕 , 在彈出的Dialog中, 必須在底部勾上: Make assembly COM-visible !否則 , 這個dll將不能以COM方式訪問 . ( 也可以在代碼中的類聲明中寫上[ComVisible(true)] , 效果一樣,需要增加using System.Runtime.InteropServices;引用)
3. 建立強命名簽名檔案並使用
使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示字元,輸入 sn -k d:HelloWorld.snk 斷行符號即建立了強命名簽名檔案
開啟項目的屬性,點選左邊Signing 勾上Sign the assembly 在 Choose a strong name key file:處選擇 選擇剛才建立的HelloWorld.snk檔案
4. 建立類庫並編譯成dll
namespace HelloWorld
{
//[ComVisible(true)] //or check "Assembly COM-Visible" at Application-Assembly_Information dialog ;
public class Hello
{
public string Write()
{
return "Hello World";
}
}
}
5. 找到dll檔案夾路徑 ,然後使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示字元
進入該dll檔案夾下輸入:
regasm HelloWorld.dll<斷行符號>
這時候,這個.dll的.net程式集就變成一個標準的Com組件了,但是還不能用,必須讓它變成全域Com組件.
將程式集添加到全域組件快取中
進入提示符視窗,輸入:
gacutil /I HelloWorld.dll<斷行符號>
這時,你的這個dll就被複製到全域組件快取中了.也就是說無論在這個電腦的哪個硬碟上都可以使用此dll組件了.
如果不進行強命名簽名,這一步會提示載入失敗
PHP測試
<?php
$r=new Com("HelloWorld.Hello");
$s=$r->Write();
echo $s;
?>
命令符下:
CD [/D] [drive:][path] #進入指定路徑
CD [..] #返回父目錄