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

隨筆-341  評論-2670  文章-0  trackbacks-0
    依然是上一篇文章的程序,換了C#寫。

    在Vczh Free Script 2.0的接口里面,我力求讓C++和.NET兩種語言的接口都趨于一致。目前達到了這個目標,C#僅僅比C++多了兩個輔助函數。插件那一部分是相當難寫啊。Vczh Free Script 2.0的C++接口允許插件和腳本交替調用。腳本引擎是本地代碼,做到跟C#『交替調用』基本上是不可能的。上次看過一篇文章,在本地代碼中調用托管代碼,用了無窮多pin和com,于是我換了一種辦法:使用Vczh Free Script 2.0提供的接口,用托管C++重新實現了一次插件。所幸代碼不長,大概一千行左右吧。

    下面是Vczh Free Script 2.0在C#中的使用方法。這個程序讀入一個文件然后執行,返回結果或者輸出錯誤信息以及出錯所在行數周邊的代碼。
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using freescript_clr;
  6 
  7 namespace FreeScript_CSharp
  8 {
  9     class VczhClass : FsClass
 10     {
 11         public VczhClass(FsPlugin Plugin)
 12             : base(Plugin, "interpreter_debug")
 13         {
 14         }
 15 
 16         public override FsePluginInvoke CallConstructor(int ClassID, FsObject[] Parameters, ref FsObject ErrorMessage, ref FsObject Result)
 17         {
 18             Console.WriteLine("VczhClass is creating");
 19             AddExternalMember(ClassID, "MethodA"0);
 20             AddExternalMember(ClassID, "MethodB"1);
 21             AddExternalMember(ClassID, "MethodC"2);
 22             return FsePluginInvoke.Success;
 23         }
 24 
 25         public override FsePluginInvoke CallMember(int ClassID, int MemberID, FsObject[] Parameters, ref FsObject ErrorMessage, ref FsObject Result)
 26         {
 27             switch (GetMemberID(MemberID))
 28             {
 29                 case 0:
 30                     Console.WriteLine("VczhClass::MethodA is invoking.");
 31                     break;
 32                 case 1:
 33                     Console.WriteLine("VczhClass::MethodB is invoking.");
 34                     break;
 35                 case 2:
 36                     Console.WriteLine("VczhClass::MethodC is invoking.");
 37                     break;
 38             }
 39             return FsePluginInvoke.Success;
 40         }
 41 
 42         public override void CallDestructor(int ClassID)
 43         {
 44             Console.WriteLine("VczhClass is destroying.");
 45         }
 46     }
 47 
 48     class VczhConsole : FsPlugin
 49     {
 50         private FsObject FWrite = null;
 51         private FsObject FWriteLine = null;
 52         private FsObject FRead = null;
 53         private FsObject FCollect = null;
 54         private VczhClass FVczhClass = null;
 55 
 56         public VczhConsole(FsEngine Engine, string CodePath)
 57             : base(Engine, "interpretor")
 58         {
 59             FWrite = Engine.CreateExternalResource();
 60             FWriteLine = Engine.CreateExternalResource();
 61             FRead = Engine.CreateExternalResource();
 62             FCollect = Engine.CreateExternalResource();
 63             FVczhClass = new VczhClass(this);
 64 
 65             GetEnvironment().SetFixedVariable("write", FWrite);
 66             GetEnvironment().SetFixedVariable("writeln", FWriteLine);
 67             GetEnvironment().SetFixedVariable("read", FRead);
 68             GetEnvironment().SetFixedVariable("collect", FCollect);
 69             GetEnvironment().SetFixedVariable("VczhClass", FVczhClass.GetCtor());
 70             GetEnvironment().SetFixedVariable("apppath", Engine.CreateString(CodePath));
 71             GetEnvironment().SetFixedVariable("vmpath", Engine.CreateString(System.AppDomain.CurrentDomain.BaseDirectory.ToString()));
 72         }
 73 
 74         public override FsePluginInvoke Invoke(int ID, FsObject[] Parameters, ref FsObject ErrorMessage, ref FsObject Result)
 75         {
 76             if (ID == FWrite.GetExternalID())
 77             {
 78                 foreach (FsObject Param in Parameters)
 79                 {
 80                     Console.Write(Param.GetReadableString());
 81                 }
 82                 return FsePluginInvoke.Success;
 83             }
 84             else if (ID == FWriteLine.GetExternalID())
 85             {
 86                 foreach (FsObject Param in Parameters)
 87                 {
 88                     Console.Write(Param.GetReadableString());
 89                 }
 90                 Console.WriteLine();
 91                 return FsePluginInvoke.Success;
 92             }
 93             else if (ID == FRead.GetExternalID())
 94             {
 95                 foreach (FsObject Param in Parameters)
 96                 {
 97                     Console.Write(Param.GetReadableString());
 98                 }
 99                 Result = GetOwnedEngine().CreateString(Console.ReadLine());
100                 return FsePluginInvoke.Success;
101             }
102             else if (ID == FCollect.GetExternalID())
103             {
104                 GetOwnedEngine().CollectGarbage();
105                 return FsePluginInvoke.Success;
106             }
107             else
108             {
109                 return FsePluginInvoke.GiveUp;
110             }
111         }
112     }
113 
114     class Program
115     {
116         static void Main(string[] args)
117         {
118             string AppPath = System.AppDomain.CurrentDomain.BaseDirectory.ToString();
119             string CodePath = "";
120             if (args.Length == 0)
121             {
122                 CodePath = AppPath + "Default.free";
123             }
124             else
125             {
126                 CodePath = args[0];
127                 AppPath = System.IO.Path.GetDirectoryName(CodePath);
128             }
129             if (AppPath[AppPath.Length - 1!= '\\')
130             {
131                 AppPath += "\\";
132             }
133             string Code = (new System.IO.StreamReader(CodePath,Encoding.Default)).ReadToEnd();
134             FsEngine Engine = new FsEngine(false);
135             new VczhConsole(Engine, AppPath);
136 
137             string ErrorMessage = "";
138             FsCodePage CodePage = Engine.Compile(Code,ref ErrorMessage);
139             if (CodePage!=null)
140             {
141                 Engine.CreateTask(CodePage);
142                 FsObject Result = Engine.CreateNull();
143 
144                 switch (Engine.Run(ref Result, ref ErrorMessage, false))
145                 {
146                     case FseRuntimeStatus.Exception:
147                         {
148                             Console.WriteLine("異常:[第" + (Engine.RuntimeErrorLine() + 1).ToString() + "行]" + Engine.RuntimeErrorMessage());
149                             string[] Lines = Engine.RuntimeErrorCode().Split(new string[] { "\r\n" }, StringSplitOptions.None);
150                             Console.WriteLine("==============================");
151                             for (int i = Engine.RuntimeErrorLine() - 5; i <= Engine.RuntimeErrorLine() + 5; i++)
152                             {
153                                 if (i >= 0 && i < Lines.Length)
154                                 {
155                                     if (i == Engine.RuntimeErrorLine())
156                                     {
157                                         Console.Write("");
158                                     }
159                                     else
160                                     {
161                                         Console.Write("");
162                                     }
163                                     Console.WriteLine(Lines[i]);
164                                 }
165                             }
166                             Console.WriteLine("==============================");
167                         }
168                         break;
169                     case FseRuntimeStatus.Finish:
170                         break;
171                     default:
172                         Console.WriteLine("未知錯誤。");
173                         Engine.DestroyTask(Engine.GetTaskCount());
174                         break;
175                 }
176             }
177             else
178             {
179                 Console.WriteLine(ErrorMessage);
180             }
181             Console.ReadLine();
182         }
183     }
184 }
posted on 2008-05-29 19:57 陳梓瀚(vczh) 閱讀(2273) 評論(5)  編輯 收藏 引用 所屬分類: Vczh Free Script

評論:
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-05-29 20:34 | foxtail
最近更新速度很快啊  回復  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-20 20:25 | Vampire.Kiss
/cy BUG漫天爬  回復  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-21 00:28 | 陳梓瀚(vczh)
VK啊等期末考后我給你最新版吧。上次給你的那個東西的確有很多Bug。嘿嘿。  回復  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-30 03:33 | suxiaojack
Vczh Free Script 2.0 幾時有完整源碼放出?  回復  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-30 10:21 | 陳梓瀚(vczh)
過幾天就有了。  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品国产一区二区电影| 欧美国产第二页| 亚洲欧美精品伊人久久| 欧美成在线视频| 欧美在线观看视频| 国产精品一区久久久| 一区二区三区精品视频| 欧美激情1区| 久久免费国产精品1| 国产综合第一页| 久久久91精品国产| 亚洲欧美日韩精品久久奇米色影视| 欧美日本一区二区视频在线观看| 亚洲激情电影在线| 亚洲高清毛片| 一本色道久久综合| 亚洲专区在线| 亚洲一区在线直播| 亚洲最黄网站| 国产精品久久777777毛茸茸| 亚洲天堂av综合网| 亚洲午夜精品福利| 一区二区三区精品在线| 亚洲第一天堂无码专区| 久久综合伊人77777蜜臀| 亚洲丰满在线| 亚洲国产99| 欧美日韩爆操| 亚洲免费视频观看| 午夜精品视频| 国产综合色精品一区二区三区| 午夜一区二区三视频在线观看| 亚洲欧美国产日韩天堂区| 国产性天天综合网| 欧美成人一品| 国产精品成人久久久久| 久久成人羞羞网站| 久久夜色精品亚洲噜噜国产mv | 亚洲国内欧美| 亚洲卡通欧美制服中文| 国产精品你懂得| 裸体歌舞表演一区二区| 欧美日韩福利视频| 欧美在线视频免费播放| 久久久久久夜精品精品免费| 日韩视频在线免费| 亚洲欧美一区二区三区久久| 1024亚洲| 亚洲一区二区三区免费观看 | 国产精品一区二区三区久久| 免费成人网www| 欧美日韩精品| 久久一二三国产| 欧美日韩一区二区三区免费看| 欧美自拍丝袜亚洲| 欧美国产91| 久久久成人网| 欧美视频一区二区三区在线观看| 久久九九99视频| 国产精品成人一区二区三区夜夜夜 | 亚洲视屏一区| 最新日韩av| 校园激情久久| 亚洲视频在线一区| 久久久欧美精品| 香蕉久久夜色精品| 欧美日本国产视频| 欧美成人自拍视频| 欧美日韩国产精品一区| 免费观看一区| 亚洲综合国产| 一区二区三区 在线观看视频| 欧美影院午夜播放| 亚洲影视在线播放| 欧美精品v日韩精品v国产精品| 久久国产欧美精品| 国产精品老女人精品视频| 亚洲精品免费看| 亚洲欧洲日韩在线| 久久婷婷国产麻豆91天堂| 性欧美8khd高清极品| 欧美精品在线一区| 亚洲国产日韩综合一区| 亚洲高清视频在线观看| 久久国产婷婷国产香蕉| 久久久久中文| 国产一区日韩一区| 欧美一区二区视频在线| 午夜一区在线| 国产欧美日韩亚洲| 亚洲综合好骚| 久久国产精品免费一区| 国产欧美一区二区精品性色| 亚洲一区二区三区成人在线视频精品| 国产精品99久久久久久久久| 欧美日韩免费看| 一本色道婷婷久久欧美| 亚洲一区二区三区四区视频| 国产精品成人免费| 亚洲欧美成人网| 久久久久久高潮国产精品视| 国产一本一道久久香蕉| 久久国产视频网| 欧美福利视频在线观看| 亚洲欧洲日产国产综合网| 欧美高清在线播放| 亚洲经典在线| 亚洲线精品一区二区三区八戒| 欧美色综合天天久久综合精品| 亚洲校园激情| 久久婷婷影院| 亚洲免费大片| 欧美日韩在线影院| 亚洲综合精品自拍| 久久一区二区三区四区| 亚洲人成毛片在线播放| 欧美色道久久88综合亚洲精品| 亚洲午夜久久久久久久久电影网| 久久精品国产69国产精品亚洲 | 久久久国产视频91| 亚洲第一级黄色片| 亚洲网站在线播放| 国产亚洲欧美日韩美女| 欧美 亚欧 日韩视频在线| 亚洲免费观看高清完整版在线观看熊 | 欧美va天堂在线| 在线综合+亚洲+欧美中文字幕| 欧美午夜在线| 欧美国产视频在线| 亚洲精品综合精品自拍| 欧美午夜欧美| 久久久国产精品亚洲一区 | 亚洲国产一区二区三区在线播| 亚洲一区二区欧美| 精品成人在线| 国产精品嫩草影院一区二区| 久久久噜噜噜| 一区二区福利| 欧美国内亚洲| 久久精品视频在线免费观看| 99精品欧美| 亚洲大片在线| 国产日韩欧美日韩| 欧美日韩精品三区| 久久精品视频99| 亚洲调教视频在线观看| 欧美国产日本韩| 久久成人综合视频| 亚洲一级在线观看| 亚洲精品国产视频| 在线观看日韩av先锋影音电影院| 欧美四级在线| 欧美日韩不卡一区| 久久伊人一区二区| 亚洲综合激情| 在线亚洲+欧美+日本专区| 欧美成人午夜| 久色成人在线| 久久婷婷久久一区二区三区| 午夜性色一区二区三区免费视频| 99精品欧美一区二区三区| 亚洲国产天堂久久国产91| 很黄很黄激情成人| 国产亚洲精品久| 国产视频观看一区| 国产精品一区久久| 国产精品一区二区三区四区| 国产精品久久波多野结衣| 欧美日韩视频不卡| 欧美日韩亚洲一区三区| 欧美日韩精品二区| 欧美日本在线播放| 欧美日韩一区自拍| 欧美日韩亚洲另类| 欧美日韩视频| 国产精品老女人精品视频| 国产精品高清在线观看| 欧美揉bbbbb揉bbbbb| 欧美色视频在线| 国产精品免费网站| 国产日韩欧美二区| 一区二区三区在线免费播放| 在线观看一区欧美| 亚洲高清不卡一区| 亚洲精品欧洲| 亚洲天堂av高清| 欧美一级片一区| 久久五月天婷婷| 免费观看不卡av| 亚洲激情网址| 99视频在线精品国自产拍免费观看| 99成人免费视频| 亚洲欧美国产日韩天堂区| 久久精品国产亚洲一区二区| 久久久亚洲一区| 欧美日韩在线免费视频| 国产精品高潮呻吟久久av无限| 国产精品一区三区| 尤物精品在线| 在线一区二区日韩|