1. 新建vs2017項目
Visual Basic -> Windows桌面 -> 類庫(.Net Framework) (用于創(chuàng)建VB...dll)
2. COM可見
解決方案資源管理器 -> “解決方案XXXXX項目”下面 -> 點擊“XXXXX”(項目名稱)
點擊“屬性”里面的“小扳手”(屬性頁)-> 應用程序
點擊“程序集信息”,勾選:使程序集COM可見
3. 創(chuàng)建強命名簽名文件并使用
sn.exe位置:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools>
sn -k d:\XXXXX.snk (強命名簽名文件)
如果找不到sn命令:.\sn?-k d:\XXXXX.snk
上面(屬性頁)-> 簽名:勾選“為程序集簽名” -> 選擇上面文件 -> 保存
4. 注冊dll沐兰,并配置到全局緩存
?regasm? D:\.....\XXXXX.dll
這個.dll的.net程序集就變成一個標準的Com組件了
regasm.exe在:C:\Windows\Microsoft.NET\Framework64\v4.0.30319
gacutil /I D:\.......\XXXXX.dll
將dll添加到全局程序集緩存中
gacutil.exe在:C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools
5. 查詢DLL是否已經(jīng)在全局緩存
gacutil -l "ClassLibrary1"
Number of items = 1(數(shù)量為1:已經(jīng)杠愧;數(shù)量為0:還未)
6. php調(diào)用dll:$David = new COM("ClassLibrary1.Class1");出現(xiàn)錯誤:
Fatal error: Uncaught Error: Class 'COM' not found in........
在php.ini里添加:extension=php_com_dotnet.dll
7. VB代碼
Public Class Class1
? ? Public Function InitLDAP(ByVal AA As Integer, ByVal BB As Integer, ByVal Name As String)
? ? ? ? Dim intValue1 As Integer = AA
? ? ? ? Dim intValue2 As Integer = BB
? ? ? ? Dim Name2 As String = Name
? ? ? ? Return AA + BB
? ? End Function
End Class
8. php調(diào)用代碼
php.ini配置文件里加上這一行
extension = php_com_dotnet
<?php
$i = 88;
$k = 9999;
$David = new COM("ClassLibrary1.Class1");
$p = $David?->InitLDAP($i,$k,"test44432");
print_r($p);
die();
?>
輸出10087