You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
11 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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