|
|
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
|
|
|
}
|
|
|
}
|