青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-341  評論-2670  文章-0  trackbacks-0
    今天做好了Vczh Free Script 2.0的一個新插件,這個插件可以直接插入class并接管成員調用、構造函數和析構函數等調用。

    一、在C++中插入一個類VczhClass和函數write、writeln、read和collect:
  1 class VczhClass : public FsClass
  2 {
  3 protected:
  4 public:
  5     VczhClass(FsPlugin* Plugin):FsClass(Plugin,L"interpreter_debug")
  6     {
  7     }
  8 
  9     FsePluginInvoke CallConstructor(int ClassID , FsObject* Parameters , int ParamCount , FsObject& ErrorMessage , FsObject& Result)
 10     {
 11         GetConsole()->Write(L"VczhClass is creating.\r\n");
 12         AddExternalMember(ClassID,L"MethodA",0);
 13         AddExternalMember(ClassID,L"MethodB",1);
 14         AddExternalMember(ClassID,L"MethodC",2);
 15         return fsSuccess;
 16     }
 17 
 18     FsePluginInvoke CallMember(int ClassID , int ExternalMemberID , FsObject* Parameters , int ParamCount , FsObject& ErrorMessage , FsObject& Result)
 19     {
 20         switch(GetMemberID(ExternalMemberID))
 21         {
 22         case 0:
 23             GetConsole()->Write(L"VczhClass::MethodA is invoking.\r\n");
 24             break;
 25         case 1:
 26             GetConsole()->Write(L"VczhClass::MethodB is invoking.\r\n");
 27             break;
 28         case 2:
 29             GetConsole()->Write(L"VczhClass::MethodC is invoking.\r\n");
 30             break;
 31         }
 32         return fsSuccess;
 33     }
 34 
 35     void CallDestructor(int ClassID)
 36     {
 37         GetConsole()->Write(L"VczhClass is destroying.\r\n");
 38     }
 39 };
 40 
 41 class VczhConsole : public FsPlugin
 42 {
 43 protected:
 44     FsObject            FWrite;
 45     FsObject            FWriteLine;
 46     FsObject            FRead;
 47     FsObject            FCollect;
 48     VczhClass*            FVczhClass;
 49 
 50     VUnicodeString Transform(const FsObject& Value)
 51     {
 52         return Value.GetReadableString().w_str();
 53     }
 54 public:
 55     VczhConsole(FsEngine* Engine , VUnicodeString CodePath):FsPlugin(Engine,L"interpreter")
 56     {
 57         FWrite        =Engine->CreateExternalResource();
 58         FWriteLine    =Engine->CreateExternalResource();
 59         FRead        =Engine->CreateExternalResource();
 60         FCollect    =Engine->CreateExternalResource();
 61 
 62         GetEnvironment().SetFixedVariable(L"write",FWrite);
 63         GetEnvironment().SetFixedVariable(L"writeln",FWriteLine);
 64         GetEnvironment().SetFixedVariable(L"read",FRead);
 65         GetEnvironment().SetFixedVariable(L"collect",FCollect);
 66         GetEnvironment().SetVariable(L"apppath",Engine->CreateString(CodePath.Buffer()));
 67         GetEnvironment().SetFixedVariable(L"vmpath",Engine->CreateString(GetConsole()->GetAppPath().Buffer()));
 68 
 69 #ifdef _DEBUG
 70         FVczhClass=new VczhClass(this);
 71         GetEnvironment().SetFixedVariable(L"VczhClass",FVczhClass->GetCtor());
 72 #else
 73         FVczhClass=0;
 74 #endif
 75     }
 76 
 77     ~VczhConsole()
 78     {
 79         if(FVczhClass)
 80         {
 81             delete FVczhClass;
 82         }
 83     }
 84 
 85     FsePluginInvoke Invoke(int ExternalID , FsObject* Parameters , int ParamCount , FsObject& ErrorMessage , FsObject& Result)
 86     {
 87         if(ExternalID==FWrite.GetExternalID())
 88         {
 89             for(VInt i=0;i<ParamCount;i++)
 90             {
 91                 GetConsole()->Write(Transform(Parameters[i]));
 92             }
 93             return fsSuccess;
 94         }
 95         else if(ExternalID==FWriteLine.GetExternalID())
 96         {
 97             for(VInt i=0;i<ParamCount;i++)
 98             {
 99                 GetConsole()->Write(Transform(Parameters[i]));
100             }
101             GetConsole()->Write(L"\r\n");
102             return fsSuccess;
103         }
104         else if(ExternalID==FRead.GetExternalID())
105         {
106             for(VInt i=0;i<ParamCount;i++)
107             {
108                 GetConsole()->Write(Transform(Parameters[i]));
109             }
110             VUnicodeString Read;
111             GetConsole()->Read(Read);
112             Result=GetOwnedEngine()->CreateString(Read.Buffer());
113             return fsSuccess;
114         }
115         else if(ExternalID==FCollect.GetExternalID())
116         {
117             int* Buffer=0;
118             int Count=GetOwnedEngine()->CollectGarbage(Buffer);
119             FsReleaseBuffer(Buffer);
120             return fsSuccess;
121         }
122         else
123         {
124             return fsGiveUp;
125         }
126     }
127 };

    二、書寫測試用的腳本代碼:
1 func()
2 {
3     a=VczhClass.new();
4     a.MethodA();
5     a.MethodB();
6     a.MethodC();
7 }();
8 collect();
    這里構造了一個VczhClass并調用了三個成員函數。結束之后,這種寫法保證a再也不可被訪問到,于是調用collect進行垃圾收集(垃圾收集是自動的,但是要觸發條件很難,所以給了個函數進行強制收集)的時候就可以把a手機掉。

    三、運行結果:
1 VczhClass is creating.
2 VczhClass::MethodA is invoking.
3 VczhClass::MethodB is invoking.
4 VczhClass::MethodC is invoking.
5 VczhClass is destroying.

    四、如果a的成員被保存起來了怎么辦呢?
 1 b=null;
 2 func()
 3 {
 4     a=VczhClass.new();
 5     a.MethodA();
 6     a.MethodB();
 7     a.MethodC();
 8     b=a.constructor;
 9 }();
10 collect();

    五、結果是因為b還能繼續使用,所以a就不會銷毀(垃圾收集器解決了這個問題):
1 VczhClass is creating.
2 VczhClass::MethodA is invoking.
3 VczhClass::MethodB is invoking.
4 VczhClass::MethodC is invoking.

    到了這里,一個直接往腳本中插入類的演示就結束了。接下來就是對這個插件進行測試,并且在相應的.NET接口上添加這樣的支持。
posted on 2008-05-28 22:50 陳梓瀚(vczh) 閱讀(1649) 評論(0)  編輯 收藏 引用 所屬分類: Vczh Free Script
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美有码在线视频| 亚洲六月丁香色婷婷综合久久| 日韩图片一区| 一区二区国产日产| 欧美欧美天天天天操| 亚洲字幕一区二区| 黄色成人在线免费| 久久久99爱| 99视频有精品| 久久婷婷色综合| 亚洲精品免费在线播放| 国产精品午夜春色av| 麻豆9191精品国产| 欧美一区二区视频网站| 亚洲美女在线视频| 老司机一区二区三区| 9l国产精品久久久久麻豆| 激情视频一区| 国产亚洲第一区| 国产精品日韩久久久| 免费观看一区| 久久先锋影音| 久久精品91久久香蕉加勒比 | 一级成人国产| 狼人天天伊人久久| 欧美一区二区精品久久911| 欧美色另类天堂2015| 亚洲欧美日本精品| 中文av一区特黄| 亚洲精品一区二区三区av| 久久一区二区三区国产精品 | 欧美成人综合| 久久免费高清| 久久久福利视频| 欧美在线观看你懂的| 亚洲自拍三区| 午夜在线视频观看日韩17c| 亚洲视频导航| 一区二区三区高清在线观看| 亚洲人成人99网站| 麻豆精品在线播放| 欧美成ee人免费视频| 免费人成精品欧美精品| 欧美顶级少妇做爰| 亚洲精选久久| 亚洲免费大片| 99亚洲伊人久久精品影院红桃| 亚洲七七久久综合桃花剧情介绍| 亚洲精品乱码视频| 亚洲香蕉网站| 在线视频亚洲欧美| 亚洲综合三区| 久久精品一区二区| 美腿丝袜亚洲色图| 欧美黄色一级视频| 亚洲精品一区二区三区av| 亚洲精品一区二区三区四区高清| 亚洲免费精品| 欧美 日韩 国产在线| 久久精品日产第一区二区| 美女精品在线观看| 欧美风情在线| 亚洲影视综合| 久久久久久久久久久久久久一区| 欧美激情aaaa| 欧美日韩亚洲在线| 国产在线精品二区| 亚洲精品日韩欧美| 国内一区二区在线视频观看| 亚洲电影下载| 亚洲欧美国产日韩中文字幕 | 欧美激情综合在线| 国产精品免费网站| 亚洲国产精品嫩草影院| 国产精品久久久久免费a∨大胸 | 免费不卡在线观看av| 欧美日韩中文字幕在线| 好吊色欧美一区二区三区视频| 另类欧美日韩国产在线| 欧美福利影院| 欧美久久久久久久| 亚洲尤物影院| 欧美一区二区三区四区视频| 在线观看日产精品| 亚洲免费观看高清完整版在线观看熊 | 久久人人97超碰国产公开结果| 一区在线视频观看| 亚洲国产裸拍裸体视频在线观看乱了中文| 久久婷婷人人澡人人喊人人爽| 亚洲人成亚洲人成在线观看| 日韩午夜中文字幕| 国产婷婷色一区二区三区四区| 免费在线日韩av| 国产精品mm| 国产视频丨精品|在线观看| 红桃视频欧美| 亚洲伦理中文字幕| 国产欧美日韩91| 欧美国产日韩在线| 国产精品大全| 欧美国产三级| 国产乱码精品一区二区三区忘忧草| 久久久午夜视频| 欧美激情二区三区| 久久成年人视频| 欧美另类视频在线| 久久久久欧美精品| 欧美性大战xxxxx久久久| 蜜臀av一级做a爰片久久| 欧美亚洲成人网| 亚洲国产日韩一区| 激情欧美亚洲| 欧美一区三区三区高中清蜜桃| av成人老司机| 老色批av在线精品| 久久久久久久欧美精品| 欧美色图一区二区三区| 欧美电影在线播放| 国内成+人亚洲| 亚洲影视综合| 亚洲免费一级电影| 欧美激情一区三区| 欧美成人精品三级在线观看| 国产精品亚洲精品| 一区二区三区视频在线| 日韩视频一区二区三区在线播放免费观看| 欧美亚洲午夜视频在线观看| 亚洲在线成人| 欧美日韩综合另类| 亚洲免费电影在线观看| 99国产精品99久久久久久粉嫩 | 欧美一区激情视频在线观看| 亚洲综合久久久久| 欧美日韩一区自拍| 亚洲国产精品999| 一色屋精品视频在线观看网站| 久久大逼视频| 久久先锋影音| 1769国内精品视频在线播放| 欧美一区二区三区四区在线| 欧美专区在线| 国产亚洲精品美女| 欧美在线视频在线播放完整版免费观看 | 国产精品久久久久久久久久尿| 欧美激情精品久久久久久| 激情综合中文娱乐网| 久久精品亚洲乱码伦伦中文| 久久国产婷婷国产香蕉| 国产在线视频欧美一区二区三区| 99伊人成综合| 亚洲综合99| 国产精品系列在线| 欧美mv日韩mv国产网站| 亚洲欧美激情视频在线观看一区二区三区| 欧美精品日韩一区| 亚洲福利在线观看| 亚洲国产乱码最新视频| 欧美高清一区| 在线亚洲一区| 欧美综合第一页| 国外成人在线| 久久久久久久久久看片| 欧美成人乱码一区二区三区| 亚洲免费不卡| 国产欧美日韩在线播放| 久久影音先锋| 99精品视频网| 久久久午夜电影| 亚洲色图在线视频| 国产午夜精品视频| 欧美黑人在线观看| 亚洲性感美女99在线| 老司机成人在线视频| 一本久久综合亚洲鲁鲁五月天| 国产麻豆9l精品三级站| 欧美69wwwcom| 午夜精品婷婷| 亚洲精品在线一区二区| 久久久www成人免费毛片麻豆| 亚洲精品久久久久久久久久久| 国产精品视频一| 欧美另类亚洲| 美国成人毛片| 欧美一级专区免费大片| 亚洲精品一区中文| 欧美1区3d| 久久精品国产久精国产思思| 99re66热这里只有精品4| 精品88久久久久88久久久| 国产精品videosex极品| 欧美成人精品一区二区| 久久精品久久综合| 亚洲永久在线| 亚洲美女在线一区| 亚洲第一天堂av| 美女黄毛**国产精品啪啪| 久久精品国产2020观看福利| 亚洲午夜av电影| 一区二区三区欧美视频| 亚洲肉体裸体xxxx137|