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

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

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

    下面是Vczh Free Script 2.0在C#中的使用方法。這個程序讀入一個文件然后執(zhí)行,返回結(jié)果或者輸出錯誤信息以及出錯所在行數(shù)周邊的代碼。
  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) 閱讀(2270) 評論(5)  編輯 收藏 引用 所屬分類: Vczh Free Script

評論:
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-05-29 20:34 | foxtail
最近更新速度很快啊  回復(fù)  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-20 20:25 | Vampire.Kiss
/cy BUG漫天爬  回復(fù)  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-21 00:28 | 陳梓瀚(vczh)
VK啊等期末考后我給你最新版吧。上次給你的那個東西的確有很多Bug。嘿嘿。  回復(fù)  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-30 03:33 | suxiaojack
Vczh Free Script 2.0 幾時有完整源碼放出?  回復(fù)  更多評論
  
# re: Vczh Free Script 2.0 最新.NET接口完成! 2008-06-30 10:21 | 陳梓瀚(vczh)
過幾天就有了。  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品你懂的| 亚洲国产你懂的| 国产日韩精品视频一区| 国产精品vvv| 欧美日韩精品在线视频| 欧美精品综合| 欧美亚一区二区| 国产亚洲人成网站在线观看| 国内久久精品视频| 亚洲国产高清一区| 久久久久久有精品国产| 久久在线播放| 欧美日本成人| 国产日韩欧美日韩大片| 国产中文一区| 日韩视频一区二区在线观看 | 欧美亚洲免费高清在线观看| 久久久精品久久久久| 欧美77777| 国产日韩一区欧美| 一本久道久久综合狠狠爱| 午夜日韩福利| 欧美二区在线观看| 一区二区欧美在线| 久久免费的精品国产v∧| 欧美调教视频| 亚洲品质自拍| 另类激情亚洲| 亚洲一区二区三区777| 免费视频一区二区三区在线观看| 国产精品a级| 91久久极品少妇xxxxⅹ软件| 香蕉久久久久久久av网站| 欧美大片网址| 性8sex亚洲区入口| 国产精品成人一区二区三区夜夜夜 | 亚洲国产精品www| 午夜精品久久久久久99热软件 | 国产综合色产在线精品| 99热精品在线| 牛人盗摄一区二区三区视频| 亚洲一区国产一区| 国产精品xvideos88| 亚洲大胆人体在线| 久久国产福利| 一区二区三区高清不卡| 欧美国产第二页| 国产在线日韩| 先锋亚洲精品| 日韩亚洲欧美成人| 欧美v国产在线一区二区三区| 欧美三级午夜理伦三级中文幕 | 一区二区三区免费网站| 欧美成人dvd在线视频| 久久米奇亚洲| 久久久久国产精品厨房| 一本一本久久a久久精品综合妖精| 久久人人精品| 国产午夜精品一区理论片飘花 | 新67194成人永久网站| 欧美成人午夜激情在线| 欧美一级专区免费大片| 欧美午夜一区二区三区免费大片| 在线欧美日韩精品| 久久综合电影一区| 欧美一区二区在线免费播放| 国产精品高潮粉嫩av| 99精品欧美一区二区三区 | 亚洲欧洲日本国产| 欧美电影电视剧在线观看| 久久国产精品亚洲va麻豆| 午夜日韩电影| 国产欧美日韩激情| 久久国产精品一区二区三区四区 | 亚洲视频免费在线| 欧美午夜一区二区福利视频| 亚洲综合色网站| 日韩午夜一区| 欧美视频一区二区三区| 在线亚洲观看| 在线中文字幕一区| 国产精品美女在线观看| 久久精品国产精品亚洲精品| 欧美在线观看你懂的| 狠狠色狠狠色综合日日五| 久久久噜噜噜久久人人看| 久久精品中文| 91久久国产综合久久| 亚洲另类一区二区| 国产精品你懂的在线| 久久亚洲精品欧美| 欧美精品色一区二区三区| 亚洲一区二区黄色| 欧美一级久久久| 亚洲人成7777| 亚洲欧美电影在线观看| 亚洲国产欧美国产综合一区 | 99视频有精品| 亚洲电影成人| 亚洲午夜精品一区二区| 在线观看三级视频欧美| 一区二区久久久久| 伊人激情综合| 亚洲女人天堂成人av在线| 亚洲成人中文| 亚洲男人的天堂在线aⅴ视频| 在线日韩中文| 日韩视频久久| 亚洲小说区图片区| 韩国亚洲精品| 亚洲精品日韩在线观看| 国产一区在线播放| 亚洲图色在线| 99综合在线| 老司机午夜免费精品视频| 午夜一区不卡| 欧美日韩另类在线| 亚洲二区在线| 在线成人免费观看| 午夜精品亚洲| 亚洲欧美日韩一区二区| 嫩草成人www欧美| 亚洲欧美日韩精品综合在线观看| 久久精品视频免费观看| 亚洲一区免费网站| 欧美精品在线观看一区二区| 免费视频亚洲| 在线播放日韩欧美| 欧美亚洲一区二区三区| 亚洲欧美精品在线| 欧美日韩高清在线播放| 亚洲国产精品va在线观看黑人| 海角社区69精品视频| 午夜精品理论片| 欧美夜福利tv在线| 国产精品裸体一区二区三区| 一区二区三区精品在线| 亚洲深夜福利视频| 欧美日韩在线播放一区二区| 亚洲精品色图| 亚洲五月六月| 国产精品www994| 亚洲一区观看| 久久精品国产欧美激情| 欧美在现视频| 欧美成人xxx| 亚洲乱码国产乱码精品精98午夜 | 欧美日韩精品高清| 亚洲深爱激情| 在线观看精品| 欧美本精品男人aⅴ天堂| 欧美激情亚洲国产| 99天天综合性| 国产精品久久久久久久电影 | 欧美一区二区私人影院日本| 久久精品一区二区国产| 黄色一区二区在线观看| 久久三级视频| 亚洲精品免费一二三区| 亚洲伊人一本大道中文字幕| 国产精品一区二区久久久久| 午夜精品国产更新| 美女视频黄a大片欧美| 亚洲精品在线观看免费| 欧美三级乱人伦电影| 欧美一区二区国产| 欧美成人一区二区| 在线亚洲成人| 黑人极品videos精品欧美裸| 国产日产高清欧美一区二区三区| 欧美午夜在线观看| 性欧美1819性猛交| 黄色成人91| 欧美日韩精品免费观看视一区二区 | 久久精品夜色噜噜亚洲a∨ | 亚洲二区三区四区| 午夜精品久久99蜜桃的功能介绍| 国产私拍一区| 欧美日产国产成人免费图片| 香港久久久电影| 亚洲人精品午夜| 久久亚洲一区二区| 亚洲影院在线| 亚洲国产高清在线观看视频| 国产精品激情电影| 免费精品视频| 欧美在线观看网站| 99热这里只有精品8| 欧美成人免费在线| 久久精品盗摄| 亚洲在线观看视频网站| 亚洲激情电影在线| 国产午夜精品福利| 国产精品成人免费精品自在线观看| 久久影院午夜论| 欧美一区二区三区免费观看| 亚洲人妖在线| 亚洲福利视频网站| 久久综合一区| 久久久久国产精品www|