using System; using System.Text; using System.Collections.Generic; using System.Runtime.InteropServices; namespace ocean { class var { /**************************************************** *Function: 设置一个变量, 基于ID查询,若不存在则返回错误 *Intput: key 变量ID pval 变量值 *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "setd_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int setstring(int key, string pval); /**************************************************** *Function: 设置一个变量值,基于变量名查询,若不存在则返回错误 *Intput: key 变量名 pval 变量值 *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "set_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int setstring(string key, string pval); /**************************************************** *Function: 设置一个整型变量值 *Intput: key 变量名 val 变量值 *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "set_int_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int setint(string key, int val); /**************************************************** *Function: 设置一个double型变量值 *Intput: key 变量名 val 变量值 *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "set_double_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int setdouble(string key, double val); /**************************************************** *Function: 获取一个变量值,基于ID查询 *Intput: key 变量ID pval 变量值 *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "getd_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int getstring(int key, StringBuilder pval); /**************************************************** *Function: 获取一个变量值,基于name查询 *Intput: key 变量名 pval 变量值 *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "get_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int getstring(string key, StringBuilder pval); /**************************************************** *Function: 获取一个整型变量值 *Intput: key 变量名 *Output: NULL *Return: 返回整型变量值,失败返回0 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "get_int_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int getint(string key); /**************************************************** *Function: 获取一个double型变量值 *Intput: key 变量名 *Output: NULL *Return: 返回整型变量值,失败返回0 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "get_double_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern double getdouble(string key); /**************************************************** *Function: 等待一个信号量(变量=目标值),并取反 *Intput: key 变量名 val 变量值 *Output: NULL *Return: 若成功等到信号量,则返回0,错误返回错误代码, 无信号返回 ERR_TIMEOUT *PS: 有保护机制,保证只有一个线程能取得该信号 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "wait_int_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int waitint(string key, int val); /**************************************************** *Function: 判断一个变量名是否存在 *Intput: key 变量名称 *Output: NULL *Return: 存在返回1,不存在返回0 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "is_var_exist", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int exist(string key); /**************************************************** *Function: 删除一个变量,基于id *Intput: key 变量ID *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "delete_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern int del(int key); public static int create(string name, string desc, string val) {//创建一个变量 TVar v = new TVar(); v.name = name; //名称 v.desc = desc; //描述 v.val = val; //初始值 v.bkeep = 0; return create(ref v); } public static int update(int key, string name, string desc, string val) {//修改一个变量 TVar v = new TVar(); v.id = key; v.name = name; //名称 v.desc = desc; //描述 v.val = val; //初始值 v.bkeep = 0; return update(v); } public static int update(string name, string val) {//修改一个变量初始值及当前值 int ret = 0; TVar v = new TVar(); v.id = get_var_id(name); if (v.id <= 0) {//not exist return create(name, name, val); } get_info(v.id, ref v); v.val = val; ret = update(v); if (ret != 0) return ret; return setstring(v.id, val); //设置当前值 } #region nouse struct TVar {//变量结构体 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string name; //变量名 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string desc; //描述 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string val; //初始值 public int id; public int bkeep; //状态保持 1保持 0不保持 下次启动记住当前值 }; /**************************************************** *Function: 创建一个变量,id传入无效,变量名不能重复 *Intput: pvar 变量结构体 *Output: NULL *Return: 成功返回id,大于0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "create_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] private static extern int create(ref TVar pvar); /**************************************************** *Function: 修改一个变量,基于id *Intput: key 变量ID pvar 变量结构体 *Output: NULL *Return: 成功返回0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "update_var", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] private static extern int update_var(IntPtr p); private static int update(TVar pvar) { IntPtr ptr; int ret = 0; ptr = Marshal.AllocHGlobal(Marshal.SizeOf(pvar)); Marshal.StructureToPtr(pvar, ptr, false); ret = update_var(ptr); Marshal.FreeHGlobal(ptr); return ret; } /**************************************************** *Function: 获取一个变量ID,通过名称获取 *Intput: key 变量名 *Output: NULL *Return: 存在返回变量ID>0,不存在返回0 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "get_var_id", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] private static extern int get_var_id(string name); /**************************************************** *Function: 获取一个变量信息 *Intput: key 变量ID pvar 变量结构体 *Output: NULL *Return: 成功返回id,大于0 失败返回错误码 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "get_var_info", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] private static extern int get_info(int key, ref TVar pvar); /**************************************************** *Function: 获取所有变量列表,可以先传空获取数量 *Intput: pVarList 变量名存储列表 *Output: pVarList 变量名存储列表 *Return: 返回变量个数 ******************************************************/ [DllImport(@"var.dll", EntryPoint = "get_var_list", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] private static extern int get_var_list(IntPtr ptr); #endregion } }