C 高階應用之Microsoft Vsa引擎篇

2021-04-14 01:30:08 字數 2970 閱讀 3412

//引擎實現部分:

using system;

using system.collections;

using system.io;

using system.reflection;

using microsoft.visualbasic.vsa;

using microsoft.vsa;

//作者注:需要增加對microsoft.vsa.dll,microsoft.visualbasic.vsa.dll,microsoft.jscript.dll的引用

namespace toolpackages

public void close()

private ivsaengine engine;

private string rootnamespace;

private string rootmoniker;

private scriptcontrolsite site;  

public ivsaerror error

}public void run()

}public scriptcontrol(string rootnamespace, string rootmoniker, string language)

site = new scriptcontrolsite();

engine.rootmoniker = rootmoniker;

engine.site = site;

engine.initnew();

engine.rootnamespace = rootnamespace;

}public void addreference(string fullname)

public void addreference(type t)

public void addreference(assembly a**)

catch(microsoft.vsa.vsaexception exception)

globalitem.typestring = t.fullname;}}

public void addeventsourceobject(string itemname, string name, object obj)

site.addeventsourceobject(itemname, name, obj);

}public object invoke(string methodname, object arguments)

;string parts;

parts = methodname.split(seprators);

if (parts.length < 2)

throw  new argumentnullexception("methodname");

int procnamepos = methodname.lastindexof('.');

string typename = methodname.substring(0, procnamepos);

string procname = methodname.substring(procnamepos + 1);

if (null == procname)

throw  new argumentnullexception("methodname");

string rootnamespace;

string fullname;

rootnamespace = engine.rootnamespace;

fullname = rootnamespace + "." + typename;

type clstype = engine.assembly.gettype(fullname, true, true);

methodinfo method = clstype.getmethod(procname);

if (null == method)

throw  new argumentnullexception("methodname");

return method.invoke(null, arguments);

}private ivsacodeitem getcodeitem(string itemname)

catch

if (codeitem == null)

codeitem = (ivsacodeitem) engine.items.createitem(itemname, vsaitemtype.code, vsaitemflag.none);

return codeitem;

}private class scriptcontrolsite : ivsasite

public void loadfrom(string pefile, string pdbfile)

public scriptcontrolsite()

public void addobject(string name, object obj)

eventsource = (idictionary) eventsourceobjects[itemname];

eventsource.add(name, obj);

}#region ivsasite members

public object geteventsourceinstance(string itemname, string eventsourcename)

public object getglobalinstance(string name)

public void notify(string notify, object info)

public bool oncompilererror(ivsaerror error)

public void getcompiledstate(out byte pe, out byte debuginfo)

#endregion}}

}//呼叫演示部分:

C巨集高階應用之

在巨集定義中經常看到 和 現在講一下他們的用法 1,是連線符 用於將兩個引數連線在一起 例如 define a x,y x y 則 a he llo 結果是hello define link a my a 則 link god 相當於 mygod 是一種分隔連線方式 他的作用是先分隔 然後強制連線 ...

Oracle高階應用之合併MERGE

為了方便大家學習和測試,所有的例子都是在oracle自帶使用者scott下建立的。merge是什麼?這麼厲害的東西你都不知道,你這學生是怎麼學習的?老師不給你講你就不會自學了嗎?哎!可憐天下老師心啊,罷了罷了,老師現在給你好好講一下吧。merge是oracle9i新增的語法,中文意思是 合併 那合併...

NoSQL Redis高階應用 之 密碼防護

給 redis 伺服器設定密碼 當客戶端連線到 redis 服務就需要密碼驗證,這樣可以保證你的 redis 安全性。檢視redis是否設定了密碼驗證 root localhost redis cli 127.0.0.1 6379 config get requirepass 1 requirepa...