马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 csharp 于 2014-5-19 10:31 编辑
首先定义一个字典类用来保存原始系统变量
- public class MyDicts
- {
- private static Dictionary<string, Object> myDictionary = new Dictionary<string, object>();
- public static Dictionary<String, Object> MyDictionary(string str, Object obj)
- {
- myDictionary.Add(str, obj);
- return myDictionary;
- }
- public static Object SysVarPush(string str, Object obj)
- {
- if (myDictionary.ContainsKey(str))//检查是否已经保存
- {
- Application.SetSystemVariable(str, obj);//直接设置新值
- return str;
- }
- else if (Application.GetSystemVariable(str) != null)//变量名称是否正确
- {
- myDictionary.Add(str, Application.GetSystemVariable(str));//保存旧变量
- try
- {
- Application.SetSystemVariable(str, obj);//设置新变量
- return obj;
- }
- catch (Exception)
- {
- return null;
- }
- }
- else
- {
- return null;
- }
- }
- public static void SysVarPop()//恢复所有初始变量
- {
- if (myDictionary.Count > 0)//如果有保存
- {
- foreach (var o in myDictionary)
- {
- Application.SetSystemVariable(o.Key.ToString(), o.Value);//恢复保存值
- }
- myDictionary.Clear();//清空字典
- }
- }
- }
再定义两个Lisp函数
- [LispFunction("SysVar_push")]
- public static Object MySysVarpush(ResultBuffer rb)
- {
- if (rb != null)
- {
- TypedValue[] values = rb.AsArray();
- List <Object> nList = new List<Object>();
-
- //List<Object> tmpList = new List<object>();
- foreach (TypedValue typedValue in values)
- {
- if (typedValue.TypeCode == (int)LispDataType.ListBegin |
- typedValue.TypeCode == (int)LispDataType.ListEnd)
- {
- continue;
- }
- else
- {
- var tmp = typedValue.Value;
- nList.Add(tmp);
- }
- }
- int j = 0;
- for (int i = 0; i < nList .Count / 2; i++)
- {
- String str = (String)nList[j];
- var obj = nList[j + 1];
- MyDicts.SysVarPush(str.ToUpper( ),obj);
- j = j + 2;
- }
- Boolean flag = true;
- return flag ;
- }
- else
- {
- return null;
- }
- }
- [LispFunction("SysVar_Pop")]
- public static void MySysVarPop(ResultBuffer rb)
- {
- MyDicts.SysVarPop();
- }
sysvar_push 作用是保存旧值并设置新值(如果前面已经保存了,仅设置新值并不再保存),sysvar_pop 是恢复所有系统已经保存初始值
|