namespace Yw.Epanet
|
{
|
/// <summary>
|
/// 交互封装
|
/// 定义程序集导入方法
|
/// </summary>
|
internal class InteropWrapper
|
{
|
//需要确保为2.2版本
|
private const string DllName = "epanet2.dll";
|
//String charset of epanet dll methods
|
private const CharSet CHARSet = CharSet.Ansi;
|
//Epanet dll calling convention
|
private const CallingConvention Convention = CallingConvention.StdCall;
|
//String type of epanet dll
|
private const UnmanagedType LPStr = UnmanagedType.LPStr;
|
|
#region 打开与关闭
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENopen 函数(打开工具箱,为了分析特定配水系统)
|
/// 在使用任何其它工具箱函数以前,必须调用ENopen (除了ENepanet)
|
/// </summary>
|
/// <param name="inpFile">EPANETH输入文件名</param>
|
/// <param name="rptFile">输出报告文件名</param>
|
/// <param name="outFile">可选二进制输出文件名,如果不需要保存EPANETH的二进制输出文件,outFile可以为空字符串("")</param>
|
/// <returns>返回错误代码</returns>
|
[DllImport(DllName, EntryPoint = "ENopen", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENopen(string inpFile, string rptFile, string outFile);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENclose 函数,用于关闭模型
|
/// 关闭工具箱系统(包括所有正在处理的文件)
|
/// 当完成所有处理之后,必须调用Enclose,即使遇到错误状况
|
/// </summary>
|
/// <returns>返回错误代码</returns>
|
[DllImport(DllName, EntryPoint = "ENclose", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENclose();
|
|
#endregion
|
|
#region 节点
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetnodeindex 函数,用于检索具有指定ID的节点索引
|
/// </summary>
|
/// <param name="id">节点的 ID 字符串(如 "JUNCTION-1")</param>
|
/// <param name="index">节点索引,节点索引是从1开始的连续整数</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功,非 0 表示错误(如节点不存在)常见错误码:201:节点 ID 不存在。202:模型未正确初始化</returns>
|
[DllImport(DllName, EntryPoint = "ENgetnodeindex", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetnodeindex(string id, ref int index);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetnodeid 函数,用于检索指定节点索引的节点ID标签
|
/// </summary>
|
/// <param name="index">节点索引,节点索引是从1开始的连续整数</param>
|
/// <param name="id">节点的 ID 字符串(如 "JUNCTION-1")</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功,非 0 表示错误(如索引越界)</returns>
|
[DllImport(DllName, EntryPoint = "ENgetnodeid", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetnodeid(int index, ref StringBuilder id);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetnodetype 函数,用于检索指定节点索引的节点类型代码
|
/// </summary>
|
/// <param name="index">节点索引,节点索引是从1开始的连续整数</param>
|
/// <param name="typeCode">节点类型代码</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功</returns>
|
[DllImport(DllName, EntryPoint = "ENgetnodetype", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetnodetype(int index, ref int typeCode);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetnodevalue 函数,用于获取节点参数值
|
/// </summary>
|
/// <param name="index">节点索引,节点索引是从1开始的连续整数</param>
|
/// <param name="paramCode">参数代码</param>
|
/// <param name="value">参数值</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功</returns>
|
[DllImport(DllName, EntryPoint = "ENgetnodevalue", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetnodevalue(int index, int paramCode, ref float value);
|
|
#endregion
|
|
#region 管段
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetlinkindex 函数,用于检索具有指定ID的管段索引
|
/// </summary>
|
/// <param name="id">管段的 ID 字符串</param>
|
/// <param name="index">管段索引,管段索引是从1开始的连续整数</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功,非 0 表示错误(如管段不存在)常见错误码:201:管段 ID 不存在。202:模型未正确初始化</returns>
|
[DllImport(DllName, EntryPoint = "ENgetlinkindex", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetlinkindex(string id, ref int index);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetlinkid 函数,用于检索指定管段索引的管段ID标签
|
/// </summary>
|
/// <param name="index">管段索引,管段索引是从1开始的连续整数</param>
|
/// <param name="id">管段的 ID 字符串</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功,非 0 表示错误(如索引越界)</returns>
|
[DllImport(DllName, EntryPoint = "ENgetlinkid", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetlinkid(int index, ref StringBuilder id);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetlinktype 函数,用于检索指定管段索引的管段类型代码
|
/// </summary>
|
/// <param name="index">管段索引,管段索引是从1开始的连续整数</param>
|
/// <param name="typeCode">管段类型代码</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功</returns>
|
[DllImport(DllName, EntryPoint = "ENgetlinktype", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetlinktype(int index, ref int typeCode);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetlinknodes 函数,用于检索指定管段端点节点的索引
|
/// 节点和管段索引是从1开始的连续整数
|
/// 管段起始和终止节点定义在EPANETH输入文件中。没有考虑管段的实际流向
|
/// </summary>
|
/// <param name="index">管段索引</param>
|
/// <param name="fnode">管段起始节点索引</param>
|
/// <param name="tnode">管段终止节点索引</param>
|
/// <returns>返回错误代号</returns>
|
[DllImport(DllName, EntryPoint = "ENgetlinknodes", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetlinknodes(int index, ref int fnode, ref int tnode);
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENgetlinkvalue 函数,用于获取管段参数值
|
/// </summary>
|
/// <param name="index">管段索引,管段索引是从1开始的连续整数</param>
|
/// <param name="paramCode">参数代码</param>
|
/// <param name="value">参数值</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功</returns>
|
[DllImport(DllName, EntryPoint = "ENgetlinkvalue", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetlinkvalue(int index, int paramCode, ref float value);
|
|
#endregion
|
|
#region 水力
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENsolveH 函数,用于求解水力模型
|
/// </summary>
|
/// <returns>返回错误代码,整数类型,0 表示成功</returns>
|
[DllImport(DllName, EntryPoint = "ENsolveH", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENsolveH();
|
|
#endregion
|
|
#region 数量
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENsolveH 函数,用于检索指定类型的管网组件数量
|
/// </summary>
|
/// <param name="countCode">组件类型代码</param>
|
/// <param name="count">数量</param>
|
/// <returns>返回错误代码,整数类型,0 表示成功</returns>
|
[DllImport(DllName, EntryPoint = "ENgetcount", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgetcount(int countCode, ref int count);
|
|
#endregion
|
|
#region 错误
|
|
/// <summary>
|
/// 引入 epanet2.dll 中的 ENsolveH 函数,用于检索与特定错误或者警告代码相关的信息文本
|
/// </summary>
|
/// <param name="errcode">错误或者警告代码</param>
|
/// <param name="errmsg">对应于errcode的错误或者警告信息的文本</param>
|
/// <param name="maxLen">errmsg可以拥有的最大字符数</param>
|
/// <returns></returns>
|
[DllImport(DllName, EntryPoint = "ENgeterror", CharSet = CHARSet, CallingConvention = Convention)]
|
public static extern int ENgeterror(int errcode, ref StringBuilder errmsg, int maxLen);
|
|
#endregion
|
|
|
|
|
}
|
}
|