2012年3月30日 星期五

使用ASP呼叫C#寫的COM元件

相關文章,請 google keyword: c# 建立 com dll asp create object

目前專案有一個需求, 要把舊系統搬到ipv6 的環境下運作, 其中一個遇到的問題就是ftp 元件, 這次的目標是要寫一個跟舊系統一模一樣的 COM.


●【 Step 1 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 先上 http://www.codeproject.com 取得一個別人寫好的 ftpclient class.
請 google keyword: codeproject ftpclient


●【 Step 2 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 參考看看這篇教學文章:
┃ → http://smilelight-tw.blogspot.com/2011/06/c-dll-vb6.html
◆ 依照教學文章裡的步驟, 在 Assembly Information 裡的 COM-Visible checkbox 打勾.
◆ 設置(Build)項目屬性裡, 把註冊 COM Interop checkbox 打勾.


●【 Step 3 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 上面文章沒有使用 簽名(Signing) 的功能, 所以在其他電腦註冊 com 元件時會出現下面的提示訊息:



◆ 解法很簡單, 請執行 sn.exe 指令, 產生簽名檔:
"C:\PROGRA~1\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -k c:\yourAppName.snk

◆ 在專案設定裡的 簽名(Signing) 分頁中選取剛才產生的 yourAppName.snk 文件.


●【 Step 4 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 最後一個步驟了, 註冊C#寫的DLL是不能用regsvr32的,要用regasm,格式為:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /codebase  c:\yourProject\yourAppName.dll

如果程式寫錯, 要移除可以下指令:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /unregister c:\yourProject\yourAppName.dll






━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ 結論 ◆
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 幾乎大部份的 .net 寫的 class 都可以轉換成 com 供 asp 呼叫.
2. 請避免使用「多形」(Polymorphism)的 method, 舊系統對多形的支援度似乎不太好.
3. 請避免在「建構方法(建構式)」(Constructor)裡使用參數, 舊系統對建構式的支援度似乎不太好.
4. 可以使用在 ipv6 上的 ftp com 寫好了.

沒有留言:

張貼留言

Facebook 留言板