AAuto 新增 dotNet 支持庫(kù),可方便的調(diào)用.Net 組件。
可使用內(nèi)存字符串嵌入.Net組件,DLL可添加到工程內(nèi)嵌資源目錄,可通過(guò)標(biāo)準(zhǔn)com接口交互,使用非常方便。
該支持庫(kù)代碼開(kāi)源( 可在標(biāo)準(zhǔn)庫(kù)中雙擊查看源碼 )。
1、創(chuàng)建.Net虛擬機(jī)
import dotNet;
var clr,err = dotNet.clr( "v2.0" );
2、創(chuàng)建應(yīng)用程序域
//創(chuàng)建應(yīng)用程序域( 屬于進(jìn)程之下,但在線程之上的程序管理容器 )
var appDomain = clr.createAppDomain();
3、引用系統(tǒng)組件,并實(shí)例化類對(duì)象
//system默認(rèn)已加載,可通過(guò) appDomain.system 直接引用該程序集
system = appDomain.load("System.Windows.Forms");
var Form = system.CreateInstance( "System.Windows.Forms.Form" )
Form.Show()
應(yīng)用程序集可放置于應(yīng)用程序根目錄( 開(kāi)發(fā)時(shí)為工程目錄 ), 或者 "/bin"子目錄下
應(yīng)用程序根目錄可在創(chuàng)建應(yīng)用程序域之前使用 clr.AppDomainSetup.ApplicationBase 自行定義
使用 appDomain.loadFile() 則支持直接自內(nèi)存載入程序集,當(dāng)然也可以是一個(gè)普通文件。
這樣添加工程目錄,并設(shè)為內(nèi)嵌資源的程序集,在發(fā)布后就不需要再附帶外部dll文件了。
4、 調(diào)用類的靜態(tài)方法
//調(diào)用類的靜態(tài)方法
var ret = appDomain.invokeStaticMember(
"\CSNET2ClassLibrary.dll" //指定程序集,寫(xiě)路徑或程序集名都可以
,"CSNET2ClassLibrary.CSSimpleObject" //類名稱
,"GetStringLength" //靜態(tài)方法名
,"HelloWorld" //支持不定個(gè)數(shù)參數(shù)
);
您可以在快手最新版本中找到上面范例的完整代碼:
范例位置:快手范例->dotNet->加載C#程序集
快手最新版本下載:http://m.elephantinaurance.com/soft/14194.html
C#類添加下面的代碼即可支持com接口
[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDispatch)]
using System.Runtime.InteropServices;
namespace CSNET2ClassLibrary
{
[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDispatch)]
public class CSSimpleObject
{
public CSSimpleObject()
{ }
}
}
附: Microsoft .NET Framework 4 Client Profile 獨(dú)立安裝程序
下面是自動(dòng)檢測(cè)并安裝.Net 4.0 Client Profile 的代碼:
import dotNet.clr;
if( true || !(dotNet.clr("v2.0") ) || ( dotNet.clr("v4.0") ) ){
import win;
import inet.downBox;
if( win.msgboxTest('您的系統(tǒng)未安裝.Net運(yùn)行庫(kù)支持\n繼續(xù)運(yùn)行本程序需要下載安裝.Net Framework 4.0,\n退出請(qǐng)按取消.',"運(yùn)行環(huán)境檢測(cè)") ){
var downBox = inet.downBox(mainForm,"正在下載 Microsoft .NET Framework 4 Client Profile")
downBox.endProc = function(ret,fileSize,err){
if(!err)
owner.endModal();
}
downBox.download(
"http://download.microsoft.com/download/5/6/2/562A10F9-C9F4-4313-A044-9C94E0A8FAC8/dotNetFx40_Client_x86_x64.exe"
, "/download/IE8-WindowsXP-x86-CHS.exe" )
if( downBox.complete ){
process.execute_wait("/download/IE8-WindowsXP-x86-CHS.exe")
}
}
}