Python 調用.net framework寫的類庫的方法
1. 安裝python2.5和對應的pywin32
安裝方法:略。
2. 下載ironPython原始碼 是C#的。
我用的是IronPython1.1的版本,從codeplex網站下載IronPython_1_1.rar。解壓縮。
3. 用vistual studio 建立一個.NET類庫工程,工程名字為:IronPython。把ironPython目錄下的src子目錄中的ironPython目錄的ironMath目錄裡的c#源檔案(不要assemblyInfo.cs)都考到你的工程目錄裡。在工程裡增加剛考來的源檔案。
4. 修改AssemblyInfo.cs
[assembly: ComVisible(false)]
將false 改為true
5. 在項目=>屬性=>產生裡把 為COM Interop註冊 打上勾
6. 在項目=>屬性=>簽名 裡把為程式集簽名 打上勾,選擇強式名稱密鑰檔案時 選擇建立,輸個檔案名稱,比如 IronPython.snk, 也可以手動產生密鑰檔案,然後在這裡選擇.
手動產生的方法:在.Net Framework的命令列介面裡 用 sn -k IronPython.snk 這個命令.
7. 編譯項目產生 IronPython.dll
8. 在.Net Framework的命令列介面裡用 regasm IronPython.dll 註冊COM組件
9. 在.Net Framework的命令列介面裡用 gacutil -i IronPython.dll 把庫加到全域緩衝裡
10. 建立.net framework 的類庫。代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
size: 10pt; font-family: 新宋體; color: blue;" lang="EN-US">namespace test
{
public class testclass
{
public string func()
{
return "hello world";
}
}
}
11. 建 立test.py調用剛才寫的test.dll類 庫。代碼:
import win32com
import win32com.client
eng=win32com.client.Dispatch("IronPython.Hosting.PythonEngine")
eng.execute("import clr")
eng.execute("import sys")
eng.execute("""sys.path.append('c:\\\\test')""")
eng.execute("print sys.path")
eng.execute("""clr.AddReferenceToFile("abc.dll")""")
eng.execute("from test import *")
eng.execute("obj = testclass()")
eng.execute("print obj.func()")
注意:eng.execute("""sys.path.append('c:\\\\test')""")
這句是將test.dll所在的路徑添加到ironPython的sys.path中去。如果不加,AddReferenceToFile將會 出錯。