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

隨筆-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) 閱讀(1643) 評論(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精品综合| 一本到12不卡视频在线dvd| 亚洲综合色激情五月| 久久深夜福利免费观看| 欧美亚洲一级| 欧美bbbxxxxx| 欧美成人激情在线| 一本一本久久a久久精品综合麻豆| 亚洲激情一区二区| 欧美成人国产va精品日本一级| 亚洲人线精品午夜| 亚洲美女中出| 国产日韩精品一区二区三区在线| 欧美在线观看网站| 久久久999成人| 亚洲免费高清| 亚洲欧美激情视频| 亚洲第一网站| 中文一区二区| 亚洲第一级黄色片| 一区二区久久久久| 在线观看欧美日韩国产| 99香蕉国产精品偷在线观看| 国产女主播一区二区三区| 美女尤物久久精品| 国产精品福利在线观看网址| 亚洲成人在线网| 亚洲日本中文字幕| 国产午夜精品一区理论片飘花| 亚洲二区免费| 国产综合色在线视频区| 亚洲国产精品一区二区www| 欧美性感一类影片在线播放| 另类av导航| 国产精品热久久久久夜色精品三区 | 亚洲国产三级| 国产午夜精品理论片a级大结局 | 久久色在线播放| 午夜日韩视频| 欧美人成免费网站| 欧美成人日本| 狠狠色狠狠色综合日日tαg | 久久香蕉国产线看观看网| 欧美日韩国产成人高清视频| 麻豆亚洲精品| 国内精品国产成人| 亚洲欧美日韩国产中文| 亚洲一二三区在线| 欧美连裤袜在线视频| 欧美成人精品一区二区| 狠狠干狠狠久久| 亚洲欧美另类在线| 欧美一区二区三区男人的天堂 | 国产伦理一区| 亚洲一区二区三区久久| 一本一本a久久| 欧美日韩1区| 欧美激情按摩在线| 亚洲精品视频免费观看| 国产女同一区二区| 亚洲欧美bt| 久久大逼视频| 国产亚洲成av人片在线观看桃| 亚洲图片欧美一区| 亚洲欧美在线免费观看| 国产精品网曝门| 午夜久久久久久| 久久久久久高潮国产精品视| 国模精品一区二区三区| 久久av一区二区三区漫画| 久久精品色图| 亚洲高清在线观看| 欧美第一黄网免费网站| 最新日韩在线| 亚洲视频1区2区| 国产精品视频成人| 久久aⅴ国产欧美74aaa| 久久久欧美精品| 亚洲国产欧美一区二区三区久久| 欧美成年人网| 在线一区二区日韩| 久久久久久久尹人综合网亚洲| 狠狠色2019综合网| 欧美成人免费va影院高清| 亚洲麻豆视频| 久久久av毛片精品| 亚洲日本成人| 国产精品天美传媒入口| 久久精品视频一| 亚洲精品乱码久久久久久黑人 | 久久艳片www.17c.com| 亚洲高清在线| 国产精品免费区二区三区观看| 午夜精品久久久久久99热软件| 美女精品一区| 亚洲欧美综合| 亚洲国产综合视频在线观看 | 欧美专区在线| 亚洲精品国产精品乱码不99| 香蕉久久夜色精品| 亚洲激情视频网站| 国产精品久久久久aaaa| 久久久久综合网| 亚洲视频综合在线| 欧美成人情趣视频| 欧美在线观看视频在线| 亚洲精品视频在线观看免费| 国产精品一区免费观看| 欧美电影免费| 久久精品一本| 香蕉亚洲视频| 日韩一二在线观看| 欧美大片免费| 久久久久久久97| 亚洲中无吗在线| 亚洲精品资源| 亚洲国产高清aⅴ视频| 国产精品综合色区在线观看| 欧美日韩精品免费| 免费美女久久99| 久久久91精品国产| 欧美一区日韩一区| 亚洲男女自偷自拍| 一区二区不卡在线视频 午夜欧美不卡在 | 美女精品国产| 亚欧成人在线| 亚洲免费网址| 亚洲视频福利| 一区二区三区视频免费在线观看| 欧美肥婆在线| 欧美成人免费全部| 久久只精品国产| 久久久久久久久久久一区| 午夜精品在线视频| 亚洲一区二区三区精品在线观看| 亚洲片在线观看| 亚洲精品专区| 99国内精品久久| 99re亚洲国产精品| 日韩视频精品在线观看| 亚洲精品裸体| 日韩午夜免费视频| 夜夜嗨av一区二区三区网页| 亚洲国产一区二区三区在线播 | 国产欧美亚洲视频| 国产色综合久久| 国产一区视频网站| 尤物yw午夜国产精品视频明星| 国产一区白浆| 在线视频成人| 日韩午夜一区| 亚洲一二三区在线| 欧美永久精品| 卡通动漫国产精品| 亚洲第一精品电影| 亚洲精品一区二| 亚洲主播在线| 久久激情婷婷| 欧美高清视频www夜色资源网| 欧美韩日一区二区三区| 欧美精品日韩| 国产欧美日韩免费看aⅴ视频| 国产欧美在线看| 亚洲娇小video精品| 99亚洲一区二区| 欧美在线国产精品| 免费一区二区三区| 亚洲精品五月天| 午夜精品久久久久久久99水蜜桃| 久久国产乱子精品免费女| 免费看黄裸体一级大秀欧美| 欧美午夜电影在线观看| 国产日韩一区二区三区在线| 亚洲电影观看| 亚洲男人av电影| 欧美va日韩va| 亚洲午夜日本在线观看| 久久久久免费视频| 欧美亚韩一区| 影音先锋一区| 亚洲自拍三区| 欧美激情一区二区三区在线视频观看 | 午夜视黄欧洲亚洲| 亚洲国产高清高潮精品美女| 夜夜嗨av一区二区三区| 久久国产精品一区二区| 欧美精品国产精品| 极品尤物久久久av免费看| 一区二区三区视频在线观看| 久久深夜福利| 亚洲午夜激情网页| 免费在线亚洲欧美| 国产日产欧产精品推荐色| 一区二区av在线| 欧美国产日本在线| 久久国产日韩| 国产美女精品视频免费观看| 一区二区日韩免费看| 欧美aa在线视频| 久久精彩免费视频|