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

隨筆-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| 在线高清一区| 欧美暴力喷水在线| 美日韩精品免费观看视频| 91久久中文| 亚洲美女福利视频网站| 国产精品高清网站| 久久久国产午夜精品| 久久午夜视频| 一区二区三区蜜桃网| 亚洲欧美日本另类| 亚洲国产精品123| 99国产精品久久久久久久成人热 | 亚洲精品乱码久久久久久蜜桃91 | 亚洲一区视频在线| 狠狠色丁香婷综合久久| 亚洲大胆人体在线| 欧美深夜影院| 久久久亚洲高清| 欧美日韩国产综合视频在线观看| 欧美一区日韩一区| 欧美高清视频在线| 午夜激情亚洲| 欧美1区2区| 欧美专区福利在线| 免费成人高清视频| 欧美综合激情网| 欧美激情乱人伦| 久久精品一区二区国产| 欧美精品一区二区三区高清aⅴ| 欧美一区二区三区播放老司机| 免费看av成人| 久久精品免费播放| 欧美日韩一区在线视频| 蜜月aⅴ免费一区二区三区| 欧美日韩在线影院| 欧美大片91| 国产一区二区电影在线观看| 在线亚洲电影| 亚洲精品影院在线观看| 新片速递亚洲合集欧美合集| 中日韩美女免费视频网址在线观看 | 久久婷婷久久| 国产伦精品一区二区三区视频黑人| 欧美激情亚洲视频| 在线观看国产成人av片| 欧美亚洲在线| 午夜精彩视频在线观看不卡| 欧美日本韩国一区| 亚洲国产电影| 亚洲高清不卡在线| 久久综合九色综合欧美狠狠| 国产精品一区免费在线观看| 亚洲另类视频| 亚洲狼人精品一区二区三区| 久久夜精品va视频免费观看| 久久综合九色99| 国产日韩成人精品| 亚洲综合日韩在线| 欧美一区二区三区四区在线| 国产精品日韩久久久| 亚洲午夜三级在线| 亚洲主播在线| 国产精品国产三级国产aⅴ浪潮| 亚洲乱码国产乱码精品精天堂 | 亚洲欧美影院| 国产视频不卡| 久久成人av少妇免费| 久久亚洲私人国产精品va| 国内成人在线| 裸体一区二区| 91久久国产自产拍夜夜嗨| 99综合在线| 欧美午夜精品一区| 亚洲综合色激情五月| 久久九九有精品国产23| 精品动漫3d一区二区三区| 老司机成人网| 日韩亚洲精品视频| 性做久久久久久久免费看| 含羞草久久爱69一区| 麻豆精品传媒视频| 一区二区欧美在线| 欧美一区二区在线播放| 激情成人av在线| 欧美电影专区| 在线视频日韩| 久久手机免费观看| 亚洲精品在线视频观看| 国产精品乱人伦中文| 久久久久久网站| 一本大道久久精品懂色aⅴ| 欧美一区二区精品| 亚洲丁香婷深爱综合| 欧美日本在线看| 午夜精品国产更新| 亚洲国产精品99久久久久久久久| 日韩视频在线一区二区| 国产精品一区二区在线观看| 久久综合影音| 亚洲一区二区视频在线| 亚洲成色777777在线观看影院| 亚洲在线第一页| 亚洲国产第一| 国产精品乱码| 欧美人妖另类| 久久综合九色九九| 亚洲欧美国产精品专区久久| 亚洲国产精品久久久久| 久久超碰97中文字幕| 99在线热播精品免费| 在线日韩一区二区| 国产欧美一区二区精品秋霞影院 | 欧美日韩大片| 久久久亚洲人| 香蕉久久夜色精品| 日韩一级黄色av| 亚洲第一黄色| 嫩草成人www欧美| 久久av在线| 国产精品二区三区四区| 欧美不卡一卡二卡免费版| 欧美在线观看www| 亚洲影视中文字幕| 一区二区三区四区五区视频| 亚洲第一黄色网| 欧美sm视频| 免费亚洲一区二区| 久久精品国语| 久久久国产亚洲精品| 欧美亚洲日本国产| 亚洲免费影视| 亚洲综合大片69999| 一区二区国产精品| 亚洲午夜电影网| 一区二区三区毛片| 亚洲午夜小视频| 一区二区精品国产| 亚洲视频图片小说| 亚洲欧美日韩国产成人| 亚洲一本视频| 亚洲欧美在线高清| 午夜日韩在线观看| 欧美在线影院| 久久午夜视频| 欧美激情免费在线| 91久久在线| 亚洲精品视频在线播放| 在线视频欧美精品| 亚洲欧美日韩国产成人| 欧美一区日韩一区| 久久精品国产视频| 久久欧美肥婆一二区| 老鸭窝亚洲一区二区三区| 免费日韩一区二区| 欧美日韩岛国| 国产色视频一区| 精品9999| 99视频一区二区| 性色av香蕉一区二区| 久久久精彩视频| 欧美激情第10页| 亚洲精品男同| 性欧美18~19sex高清播放| 久久久中精品2020中文| 欧美福利在线观看| 欧美午夜三级| 影音先锋成人资源站| 一本色道**综合亚洲精品蜜桃冫| 亚洲欧美另类在线| 麻豆精品视频在线观看| 亚洲国产精品久久91精品| 亚洲视频精选| 美女诱惑一区| 国产精品影视天天线| 亚洲第一精品夜夜躁人人爽| 一本久久综合亚洲鲁鲁五月天 | 亚洲国产精品久久久久久女王| 这里只有精品视频| 巨乳诱惑日韩免费av| 亚洲精品资源| 久久一区二区三区四区| 国产精品扒开腿爽爽爽视频 | 亚洲经典在线| 欧美在线不卡视频| 亚洲欧洲中文日韩久久av乱码| 亚洲一区二区三区中文字幕| 欧美不卡高清| 国内精品久久久久久久97牛牛| 99re6这里只有精品视频在线观看| 久久不射网站| 亚洲视频欧美视频| 女女同性精品视频| 国产一区二区主播在线| 午夜精品视频一区| 亚洲精品中文字幕在线| 男人的天堂亚洲| 激情成人综合| 欧美中文字幕视频|