InPowerS.Net

 找回密碼
 註冊
搜索
查看: 2876|回復: 0

PHP 調用 C# dll(c#,php)

[複製鏈接]
發表於 2010-10-1 11:38:22 | 顯示全部樓層 |閱讀模式
背景: Windows XP SP3 ;Apache 2.2.14 ;php 5.2.12 ;VS2010 beta ;
語言: PHP5 , C#
C#部分:
創建一個 C# Class Library (dll), 創建完成後,
打開專案的屬性,
在點選左邊的 “Application” (就是第一個tab) , 然後點擊 Assembly Information 按鈕,
在彈出的Dialog中, 必須在底部勾上: Make assembly COM-visible.
否則 , 這個dll將不能以COM方式訪問 .
( 當然, 你也可以在代碼中的類聲明中寫上[ComVisible(true)] , 效果一樣)
代碼如下:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;  
  6. namespace test
  7. {   
  8.     //[ComVisible(true)] //or check "Assembly COM-Visible" at Application-Assembly_Information dialog ;
  9.     public class PhpImage
  10.     {
  11.         public string test()
  12.         {
  13.             return "Hello world!";
  14.         }
  15.     }
  16. }
複製代碼

然後編譯出了dll , 這裡叫 phpimage.dll
我以為直接在php中寫如下語句既可:
  1. <?php
  2.   $myPhpImg = new COM("test.PhpImage");
  3.   echo $myPhpImg ->test() ;
  4. ?>
複製代碼

後來結果當然是錯誤的,無法創建com對象.
其實用屁股想也知道, 系統哪裡知道test.PhpImage是對應哪一個dll !
關鍵是 RegAsm.exe 這個.net 工具程式, 相關介紹:
http://msdn.microsoft.com/zh-cn/library/tzat5yw6(VS.80).aspx
這麼註冊C# COM DLL的 :
(ps1:我的dll叫phpimage.dll )
(ps2:請在phpimage.dll的資料夾下,調用這個命令列)
regasm phpimage.dll /tlb:phpimage.tlb /codebase
ok, 你不放心可以查找register, 你會發現裡面有一個 test.PhpI ......
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

小黑屋|Archiver|手機版|InPowerS.Net

GMT+8, 2018-12-12 18:06

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表