SoftKey.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. using System;
  2. using System.Text;
  3. using System.Runtime.InteropServices;
  4. namespace WindowsApplication1
  5. {
  6. /// <summary>
  7. /// Class1 的摘要说明。
  8. /// </summary>
  9. public class SoftKey
  10. {
  11. [DllImport ("Lyfz32.dll")]
  12. public static extern short FindPort(int start, StringBuilder sKeyPath);
  13. [DllImport ("Lyfz32.dll")]
  14. public static extern short FindPort_2(int start, byte[] InByte, int InLen, StringBuilder sKeyPath);
  15. [DllImport ("Lyfz32.dll")]
  16. public static extern short CalEx(byte [] InByte,int in_len,ref int D0,ref int D1,ref int D2,ref int D3,ref int D4,ref int D5,ref int D6,ref int D7,
  17. ref double F0,ref double F1,ref double F2,ref double F3,ref double F4,ref double F5,ref double F6,ref double F7,
  18. StringBuilder S0, StringBuilder S1, StringBuilder S2, StringBuilder S3, StringBuilder S4, StringBuilder S5, StringBuilder S6, StringBuilder S7, String sKeyPath, int over_count);
  19. [DllImport ("Lyfz32.dll")]
  20. public static extern short CalPubByFile(string InFile,ref int D0,ref int D1,ref int D2,ref int D3,ref int D4,ref int D5,ref int D6,ref int D7,
  21. ref double F0,ref double F1,ref double F2,ref double F3,ref double F4,ref double F5,ref double F6,ref double F7,
  22. StringBuilder S0, StringBuilder S1, StringBuilder S2, StringBuilder S3, StringBuilder S4, StringBuilder S5, StringBuilder S6, StringBuilder S7, String sKeyPath, int over_count);
  23. [DllImport ("Lyfz32.dll")]
  24. public static extern short EdcByFile(string Key, string InbinFile, string OutbinFile, String KeyPath);
  25. [DllImport ("Lyfz32.dll")]
  26. public static extern short ReadKeyFormEpm(StringBuilder OutAuthCode, short Addr, string HKey, string LKey, String KeyPath);
  27. [DllImport ("Lyfz32.dll")]
  28. public static extern short GetIDVersion(ref uint ID, ref short version, String KeyPath);
  29. [DllImport ("Lyfz32.dll")]
  30. public static extern bool GetAuthFromFile(string InFile,StringBuilder HKey,StringBuilder LKey,StringBuilder OutSetTime,ref uint id);
  31. [DllImport ("Lyfz32.dll")]
  32. public static extern short GetRunTimer(StringBuilder Year, StringBuilder Month, StringBuilder Day, StringBuilder Hour, StringBuilder Minuts, StringBuilder Second, String KeyPath);
  33. [DllImport ("Lyfz32.dll")]
  34. public static extern bool WriteIniSetting(string FileName,string HKey,string LKey,string Time,uint id);
  35. [DllImport ("Lyfz32.dll")]
  36. public static extern short AddConnectNew(byte InFunNum, short Addr, bool IfClose, StringBuilder OutVerCode, String KeyPath);
  37. [DllImport ("Lyfz32.dll")]
  38. public static extern short AddConnectEx(byte InFunNum, short Addr, bool IfClose, String KeyPath);
  39. [DllImport ("Lyfz32.dll")]
  40. public static extern short GetIpCountByFunNum (byte FunNum );
  41. [DllImport ("Lyfz32.dll")]
  42. public static extern short GetConCountByFunNum (byte FunNum ) ;
  43. [DllImport ("Lyfz32.dll")]
  44. public static extern short GetSetCount(short Addr, ref int count, ref bool IsMachine, ref byte OutFum, String KeyPath);
  45. [DllImport ("Lyfz32.dll")]
  46. public static extern short ConnectServer (string ServerName , int Port );
  47. [DllImport ("Lyfz32.dll")]
  48. public static extern short DisconnectServer () ;
  49. [DllImport("Lyfz32.dll")]
  50. public static extern unsafe void AutoDisConnect(int timer, bool biao);
  51. public String KeyPath;
  52. public SoftKey()
  53. {
  54. //
  55. // TODO: 在此处添加构造函数逻辑
  56. //
  57. }
  58. public static string GetFullFileName(string InFilName)
  59. {
  60. string path=System.Windows.Forms.Application.StartupPath;
  61. if(path.Substring(path.Length-1,1)!="\\" && path.Substring(path.Length-1,1)!="/")path=path+"\\";
  62. return path+InFilName;
  63. }
  64. //以下函数用于将字节数组转化为宽字符串
  65. public static string ByteConvertString(byte[] buffer)
  66. {
  67. char []null_string={'\0','\0'};
  68. System.Text.Encoding encoding = System.Text.Encoding.Default;
  69. return encoding.GetString(buffer).TrimEnd(null_string);
  70. }
  71. //以下函数用于将宽字符串转化为字节数组
  72. public static bool StringConvertByte(byte[] buffer,string InS)
  73. {
  74. byte []temp;int n;
  75. temp=System.Text.Encoding.Default.GetBytes(InS);
  76. if (temp.Length>50)return false;
  77. for (n=1;n<=temp.Length;n++)
  78. {
  79. buffer[n-1]=temp[n-1];
  80. }
  81. return true;
  82. }
  83. //以下函数用于网络版//////////////////////////////////////////////////////////////
  84. //该函数用于连接服务器
  85. //第一个参数为要连接的服务器名称或IP
  86. //第二个参数为连接使用的通讯端口,开发商可以自定义,但客户端的必须与服务端的端口相同,端口的范围为1024-40000
  87. public short ConnectSvr(string ServerName,int Port)
  88. {
  89. return ConnectServer(ServerName,Port);
  90. }
  91. //该函数用于将指定的功能连接添加到服务器,并返回检验码
  92. //第一个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入
  93. //第二个参数用于返回检验码,是用于判断是否为相应的授权,如果该数值与开发工具所得的检验码相符,则为合法授权,否则为非法授权
  94. //检验码由开发工具生成,不同的开发密钥或主锁内置密钥,生成的检验码都不相同且唯一对应
  95. public short ConnectAddNew(short Addr,ref string OutVerCode)
  96. {
  97. //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0,
  98. //如果是普通网络锁则只能有唯一的一个模块,真正的网络锁支持128个功能模块
  99. //第二个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入
  100. //第三个参数为当连接失败时,是否关闭与服务器的连接
  101. //第四个参数用于返回检验码,是用于判断是否为相应的授权,如果该数值与开发工具所得的检验码相符,则为合法授权,否则为非法授权
  102. //第五个参数为加密锁所在的设备路径
  103. short ret; StringBuilder VerCode = new StringBuilder("", 20);
  104. ret = AddConnectNew(0, Addr, false, VerCode, KeyPath);
  105. OutVerCode = VerCode.ToString();
  106. AutoDisConnect(60000, true); //用于超时自动断开无效连接,超时时间为60秒
  107. return ret;
  108. //注意:第三个参数的使用,如果不是真正的网络锁,这个参数将会忽略,并总是当连接失败时,关闭与服务器的连接
  109. //如果是真正的网络锁,则为FALSE时,不断开与服务器的连接,
  110. }
  111. //该函数用于将指定的功能连接添加到服务器(该函数已不使用)
  112. //第一个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入
  113. public short ConnectAdd(short Addr)
  114. {
  115. //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0,
  116. //如果是普通网络锁则只能有唯一的一个模块,真正的网络锁支持128个功能模块
  117. //第二个参数为授权号储存在加密锁的位置,授权号储存在加密锁的位置在开发工具写入网络授权用户数时自定义输入
  118. //第三个参数为当连接失败时,是否关闭与服务器的连接
  119. //第四个参数为加密锁所在的设备路径
  120. {
  121. return AddConnectEx(0, Addr, false,KeyPath);
  122. }
  123. //注意:第三个参数的使用,如果不是真正的网络锁,这个参数将会忽略,并总是当连接失败时,关闭与服务器的连接
  124. //如果是真正的网络锁,则为FALSE时,不断开与服务器的连接,
  125. }
  126. //以下函数用于返回当前设置在加密锁中的授权数
  127. //第一个参数与上面相同
  128. public int GetKeySetCount(short Addr)
  129. {
  130. int count=0;bool IsMachine=false;byte OutFum=0;int ret;
  131. {
  132. ret=GetSetCount(Addr,ref count,ref IsMachine,ref OutFum,KeyPath);
  133. }
  134. if(ret!=0)return ret;
  135. return count;
  136. }
  137. //以下函数用于返回当前连接到服务的机器数
  138. public short SGetIpCount()
  139. {
  140. //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0
  141. return GetIpCountByFunNum(0);
  142. }
  143. //以下函数用于返回当前连接到服务的连接数
  144. public short GetConCount()
  145. {
  146. //第一参数为连接的功能模块号,如果只一个功能模块,见这里固定使用0
  147. return GetConCountByFunNum(0);
  148. }
  149. //以下函数用于断开与服务的连接数
  150. public short DisConnect()
  151. {
  152. return DisconnectServer();
  153. }
  154. //以上函函数用于网络版////////////////////////////////////////////////////////////
  155. //使用输入授权号的方式,对加密文件进行注册,适用于远程授权的方式
  156. public short Reg(string Key)
  157. {
  158. short n, ret;
  159. string FilePath_Ini,FilePath, RegFilePath_Ini,RegFilePath;
  160. int [] D=new int[8];double [] F=new double[8];
  161. StringBuilder s0=new StringBuilder("",50),s1=new StringBuilder("",50),s2=new StringBuilder("",50),s3=new StringBuilder("",50);
  162. StringBuilder s4=new StringBuilder("",50),s5=new StringBuilder("",50),s6=new StringBuilder("",50),s7=new StringBuilder("",50);
  163. //获取加密文件的绝对路径
  164. //其中test_ini.enc文件中包含有求注册的加密表达式:D0=123,D1=123,D2=123,D3=123,用于查找对应锁所在的端口,
  165. //因为系统上可能存在着多把锁
  166. FilePath_Ini=GetFullFileName("JMGTest_Ini.enc");RegFilePath_Ini=GetFullFileName("JMGTest_Ini.enc.lll");
  167. //查找系统上所有的锁,
  168. for(n=0;n<256;n++)
  169. {
  170. {
  171. StringBuilder sKeyPath = new StringBuilder("", 260);
  172. ret=FindPort(n,sKeyPath);
  173. KeyPath = sKeyPath.ToString();
  174. if(ret!=0 && n>0 )return -1052;
  175. if(ret!=0)return ret;
  176. //使用授权号对加密文件进行注册,
  177. //注册后,会生成新的注册文件,如果这个文件被删除后,要重新进行注册
  178. ret=EdcByFile(Key,FilePath_Ini,RegFilePath_Ini,KeyPath);
  179. if(ret!=0)return ret;
  180. ret=CalPubByFile(RegFilePath_Ini,ref D[0],ref D[1],ref D[2],ref D[3],ref D[4],ref D[5],ref D[6],ref D[7],
  181. ref F[0],ref F[1],ref F[2],ref F[3],ref F[4],ref F[5],ref F[6],ref F[7],
  182. s0,s1,s2,s3,s4,s5,s6,s7,KeyPath,20000);
  183. //只有对应锁对应的授权号进行注册后的文件,运算结果才能为D0=123,D1=123,D2=123,D3=123
  184. if((ret==0) && (D[0]==123) && (D[1]==123) && (D[2]==123) && (D[3]==123))
  185. {
  186. //如果正确,则使用对应该端口的锁对正式的加密文件进行注册
  187. //注册后,会生成新的注册文件,如果这个文件被删除后,要重新进行注册
  188. FilePath=GetFullFileName("JMGTest.enc");RegFilePath=GetFullFileName("JMGTest.enc.lll");
  189. ret=EdcByFile(Key,FilePath,RegFilePath,KeyPath);
  190. //如果有多个要注册的文件,可以在这里进行添加.......
  191. if(ret!=0)return ret;
  192. //addtofile_2...请不要修改这里
  193. return 0;
  194. }
  195. }
  196. //如果运算结果不为D0=123,D1=123,D2=123,D3=123,则继续查找下一把锁
  197. }
  198. return -53;
  199. }
  200. //使用已储存在锁中的授权号,对加密文件进行注册,适用于本地授权的方式
  201. public short RegByEpm(short Addr,string HKey,string LKey)
  202. {
  203. short n, ret;
  204. string FilePath_Ini,FilePath, RegFilePath_Ini,RegFilePath;
  205. int [] D=new int[8];double [] F=new double[8];
  206. StringBuilder s0=new StringBuilder("",50),s1=new StringBuilder("",50),s2=new StringBuilder("",50),s3=new StringBuilder("",50);
  207. StringBuilder s4=new StringBuilder("",50),s5=new StringBuilder("",50),s6=new StringBuilder("",50),s7=new StringBuilder("",50);
  208. //获取加密文件的绝对路径
  209. //其中JMGTest_Ini.enc文件中包含有求注册的加密表达式:D0=123,D1=123,D2=123,D3=123,用于查找对应锁所在的端口,
  210. //因为系统上可能存在着多把锁
  211. FilePath_Ini=GetFullFileName("JMGTest_Ini.enc");RegFilePath_Ini=GetFullFileName("JMGTest_Ini.enc.lll");
  212. StringBuilder Key=new StringBuilder("",300);//用于保存储存在智能锁中的授权号,分配空间一定要大于257
  213. //查找系统上所有的锁,
  214. for(n=0;n<256;n++)
  215. {
  216. {
  217. StringBuilder sKeyPath = new StringBuilder("", 260);
  218. ret=FindPort(n,sKeyPath);
  219. KeyPath = sKeyPath.ToString();
  220. if(ret!=0 && n>0 )return -1052;
  221. if(ret!=0)return ret;
  222. //从智能锁中读取储存在锁中的授权号
  223. ret=ReadKeyFormEpm(Key,Addr,HKey,LKey,KeyPath);
  224. if(ret!=0)return ret;
  225. //使用授权号对加密文件进行注册,
  226. //使用授权号对加密文件进行注册,
  227. //注册后,会生成新的注册文件,如果这个文件被删除后,要重新进行注册
  228. ret = EdcByFile(Key.ToString(), FilePath_Ini, RegFilePath_Ini, KeyPath);
  229. if(ret!=0)return ret;
  230. ret=CalPubByFile(RegFilePath_Ini,ref D[0],ref D[1],ref D[2],ref D[3],ref D[4],ref D[5],ref D[6],ref D[7],
  231. ref F[0],ref F[1],ref F[2],ref F[3],ref F[4],ref F[5],ref F[6],ref F[7],
  232. s0,s1,s2,s3,s4,s5,s6,s7,KeyPath,20000);
  233. //只有对应锁对应的授权号进行注册后的文件,运算结果才能为D0=123,D1=123,D2=123,D3=123
  234. if((ret==0) && (D[0]==123) && (D[1]==123) && (D[2]==123) && (D[3]==123))
  235. {
  236. //如果正确,则使用对应该端口的锁对正式的加密文件进行注册
  237. //注册后,会生成新的注册文件,如果这个文件被删除后,要重新进行注册
  238. FilePath=GetFullFileName("JMGTest.enc");RegFilePath=GetFullFileName("JMGTest.enc.lll");
  239. ret = EdcByFile(Key.ToString(), FilePath, RegFilePath, KeyPath);
  240. //如果有多个要注册的文件,可以在这里进行添加.......
  241. if(ret!=0)return ret;
  242. //addtofile_2...请不要修改这里
  243. return 0;
  244. }
  245. }
  246. //如果运算结果不为D0=123,D1=123,D2=123,D3=123,则继续查找下一把锁
  247. }
  248. return -53;
  249. }
  250. //在程序开始运行时,请先调用Ini过程,查找对应的加密锁所在的设备路径;
  251. //如果找到对应的加密锁,会将该路径保存在变量KeyPath中,
  252. //以备其它函数的调用;
  253. public short Ini()
  254. {
  255. short n, ret;string RegFilePath_Ini;
  256. int [] D=new int[8];double [] F=new double[8];
  257. StringBuilder s0=new StringBuilder("",50),s1=new StringBuilder("",50),s2=new StringBuilder("",50),s3=new StringBuilder("",50);
  258. StringBuilder s4=new StringBuilder("",50),s5=new StringBuilder("",50),s6=new StringBuilder("",50),s7=new StringBuilder("",50);
  259. //获得已注册文件的绝对路径
  260. RegFilePath_Ini=GetFullFileName("JMGTest_Ini.enc.lll");
  261. //查找系统上所有的锁,
  262. for(n=0;n<256;n++)
  263. {
  264. {
  265. StringBuilder sKeyPath = new StringBuilder("", 260);
  266. ret = FindPort(n, sKeyPath);
  267. KeyPath = sKeyPath.ToString();
  268. if(ret!=0 && n==0)return -1053;//表示系统上没有任何智能锁
  269. if(ret!=0)return ret;
  270. //使用该设备路径锁进行运算
  271. ret=CalPubByFile(RegFilePath_Ini,ref D[0],ref D[1],ref D[2],ref D[3],ref D[4],ref D[5],ref D[6],ref D[7],
  272. ref F[0],ref F[1],ref F[2],ref F[3],ref F[4],ref F[5],ref F[6],ref F[7],
  273. s0,s1,s2,s3,s4,s5,s6,s7,KeyPath,20000);
  274. }
  275. if(ret==-63)return ret;
  276. //如果正确,则返回该设备路径供以后使用
  277. if((ret==0) && (D[0]==123) && (D[1]==123) && (D[2]==123) && (D[3]==123))return 0;
  278. }
  279. return -53;
  280. }
  281. public short GetJMGTest(ref int D0,ref int D1,ref int D2,ref int D3,ref int D4,ref int D5,ref int D6,ref int D7,
  282. ref double F0,ref double F1,ref double F2,ref double F3,ref double F4,ref double F5,ref double F6,ref double F7,
  283. ref string S0,ref string S1,ref string S2,ref string S3,ref string S4,ref string S5,ref string S6,ref string S7)
  284. {
  285. short ret;
  286. //以下是将自定义的加密代码送到加密锁中进行运算,该自定义的加密代码是:
  287. if (S0.Length > 49) return -36; if (S1.Length > 49) return -36;
  288. if (S2.Length > 49) return -36; if (S3.Length > 49) return -36;
  289. if (S4.Length > 49) return -36; if (S5.Length > 49) return -36;
  290. if (S6.Length > 49) return -36; if (S7.Length > 49) return -36;
  291. StringBuilder s0 = new StringBuilder(S0, 50), s1 = new StringBuilder(S1, 50), s2 = new StringBuilder(S2, 50), s3 = new StringBuilder(S3, 50);
  292. StringBuilder s4 = new StringBuilder(S4, 50), s5 = new StringBuilder(S5, 50), s6 = new StringBuilder(S6, 50), s7 = new StringBuilder(S7, 50);
  293. string RegFilePath;
  294. RegFilePath=GetFullFileName("JMGTest.enc.lll");
  295. //以下是将自定义的加密表达式的加密文件送到加密锁中进行运算
  296. //这里对数据进行初始化工作
  297. //...
  298. {
  299. ret=CalPubByFile(RegFilePath, ref D0,ref D1,ref D2,ref D3,ref D4,ref D5,ref D6,ref D7,
  300. ref F0,ref F1,ref F2,ref F3,ref F4,ref F5,ref F6,ref F7,
  301. s0,s1,s2,s3,s4,s5,s6,s7,KeyPath,20000);
  302. //这里判断返回结果
  303. if( ret==-43) ret=0;//代码使用End语句结束
  304. if (ret==0)
  305. {
  306. S0=s0.ToString();S1=s1.ToString();S2=s2.ToString();S3=s3.ToString();
  307. S4=s4.ToString();S5=s5.ToString();S6=s6.ToString();S7=s7.ToString();
  308. }
  309. }
  310. return ret;
  311. }
  312. //addtofile_1...请不要修改这里
  313. public bool GetAuthFromFileEx(string IniFile,ref string OutHKey,ref string OutLKey,ref string OutSetTime,ref uint OutID)
  314. {
  315. StringBuilder HKey;//授权码的高位
  316. StringBuilder LKey;//授权码的低位
  317. StringBuilder SetTime;//设置的授权时间
  318. HKey=new StringBuilder("",50);LKey=new StringBuilder("",50);SetTime=new StringBuilder("",100);
  319. //从INI文件中获得授权码的高低位,设置的授权时间及授权ID等。远程更新时间时,直接更新INI文件就可以了
  320. {
  321. if(!GetAuthFromFile(IniFile,HKey,LKey,SetTime,ref OutID))return false;
  322. }
  323. OutHKey=HKey.ToString();
  324. OutLKey=LKey.ToString();
  325. OutSetTime=SetTime.ToString();
  326. return true;
  327. }
  328. public short GetRunTimerEx(ref string OutYear,ref string OutMonth,ref string OutDay,
  329. ref string OutHour,ref string OutMinuts,ref string OutSecond)
  330. {
  331. short ret;
  332. StringBuilder year=new StringBuilder("",10),month=new StringBuilder("",10),day=new StringBuilder("",10),hour=new StringBuilder("",10);
  333. StringBuilder minuts=new StringBuilder("",10),second=new StringBuilder("",10);
  334. {
  335. ret=GetRunTimer(year,month,day,hour,minuts,second,KeyPath);
  336. if(ret!=0)return ret;
  337. }
  338. OutYear=year.ToString();OutMonth=month.ToString();
  339. OutDay=day.ToString();OutHour=hour.ToString();
  340. OutMinuts=minuts.ToString();OutSecond=second.ToString();
  341. return ret;
  342. }
  343. public short GetIDVersionEx(ref uint id,ref short ver)
  344. {
  345. {
  346. return GetIDVersion(ref id,ref ver,KeyPath);
  347. }
  348. }
  349. public short FindPortEx(int start)
  350. {
  351. StringBuilder sKeyPath = new StringBuilder("", 260);
  352. {
  353. short ret = FindPort(start, sKeyPath);
  354. KeyPath = sKeyPath.ToString();
  355. return ret;
  356. }
  357. }
  358. public string GetErrInfo(short err )
  359. {
  360. switch(err)
  361. {
  362. case -1:
  363. return "未找到返回结果变量";
  364. case -2:
  365. return "未找到 = 符号";
  366. case -3:
  367. return "代表没有找到相应常数";
  368. case -5:
  369. return "代表找不到字符串的第一个双引号";
  370. case -6:
  371. return "代表找不到字符串的第二个双引号";
  372. case -7:
  373. return "IF语句没有找到goto字符";
  374. case -8:
  375. return "IF语句没有找到第一个比较字符";
  376. case -9:
  377. return "IF语句没有找到比较符号";
  378. case -10:
  379. return "两边变量类型不相符";
  380. case -11:
  381. return "没有找到NOT符号";
  382. case -12:
  383. return "不是整形变量";
  384. case -13:
  385. return "代表没有找到相应整形常数";
  386. case -14:
  387. return "代表没有找到相应字符串常数";
  388. case -15:
  389. return "代表没有找到相应浮点常数";
  390. case -16:
  391. return "代表不支持这个运算";
  392. case -17:
  393. return "代表没有左边括号";
  394. case -18:
  395. return "代表没有变量";
  396. case -19:
  397. return "代表没“,”";
  398. case -20:
  399. return "代表没有右边括号";
  400. case -21:
  401. return "代表常数超过指这定的范围";
  402. case -22:
  403. return "代表储存器的地址超过指定的范围,整数不能超过EEPROM_LEN-4,浮点不能超过30720-8";
  404. case -23:
  405. return "代表储存器的地址超过指定的范围,字符串不能超过EEPROM_LEN-LEN,其中LEN为字符串的长度";
  406. case -24:
  407. return "除法中,被除数不能为0";
  408. case -25:
  409. return "未知错误";
  410. case -26:
  411. return "第二个变量不在指定的位置";
  412. case -27:
  413. return "字符串常量超过指定的长度";
  414. case -28:
  415. return "不是字符串变量";
  416. case -29:
  417. return "没有第三个变量";
  418. case -30:
  419. return "GOTO的标识语句不能全为数字";
  420. case -31:
  421. return "不能打开ENC文件";
  422. case -32:
  423. return "不能读ENC文件";
  424. case -33:
  425. return "GOTO CALL不能找到指定的跳转位置";
  426. case -34:
  427. return "智能卡运算中,未知数据类型";
  428. case -35:
  429. return "智能卡运算中,未知代码类型";
  430. case -36:
  431. return "字符串长度超出50";
  432. case -37:
  433. return "RIGHT操作时超长,负长";
  434. case -38:
  435. return "标识重复";
  436. case -39:
  437. return "程序堆栈溢出";
  438. case -40:
  439. return "堆栈溢出";
  440. case -41:
  441. return "不能建立编译文件,请查看文件是否有只读属性,或被其它文件打开";
  442. case -42:
  443. return "不能写文件,请查看文件是否有只读属性,或被其它文件打开";
  444. case -43:
  445. return "程序被中途使用END语句结束";
  446. case -44:
  447. return "程序跳转到外部的空间";
  448. case -45:
  449. return "传送数据失败";
  450. case -46:
  451. return "程序超出运算次数,可能是死循环";
  452. case -47:
  453. return "写密码不正确";
  454. case -48:
  455. return "读密码不正确";
  456. case -49:
  457. return "读写EEPROM时,地址溢出";
  458. case -50:
  459. return "USB操作失败,可能是没有找到相关的指令";
  460. case -51:
  461. return "打开USB文件句柄失败";
  462. case -52:
  463. return "使用加密锁加密自定义表达式,生成加密代码时生产错误";
  464. case -53:
  465. return "无法打开usb设备,可能驱动程序没有安装或没有插入加密锁。";
  466. case -63 :
  467. return "不能打开指定的文件。";
  468. case -64:
  469. return "不能建立指定的文件。";
  470. case -65:
  471. return "验证码错误,可能是输入解密密钥错误,或注册授权码错误";
  472. case -66:
  473. return "执行TIMEOUT函数或UPDATE函数时,输入的ID与锁ID不相符";
  474. case -67:
  475. return "执行TIMEOUT函数时,智能卡运行函数已到期";
  476. case -68:
  477. return "操作浮点运算时,输入的参数将会导致返回值是一个无穷值";
  478. case -69:
  479. return "代表没足够的变量参数";
  480. case -70:
  481. return "返回变量与函数不相符";
  482. case -71:
  483. return "浮点数转换字符串时,要转换的数据太大。";
  484. case -72:
  485. return "初始化服务器错误";
  486. case -73:
  487. return "对缓冲区进行MD5运算时错误";
  488. case -74 :
  489. return "MD5验证IPVAR错误";
  490. case -75 :
  491. return "MD5验证IPCount错误";
  492. case -76 :
  493. return "没有找到对应的SOCKET连接";
  494. case -77:
  495. return "没有找到要删除的对应的SOCKET连接";
  496. case -78 :
  497. return "没有找到要删除的对应的功能模块号连接";
  498. case -79:
  499. return "没有找到要增加的对应的功能模块号连接";
  500. case -80:
  501. return "用户数已超过限制的授权数量";
  502. case -81:
  503. return "找不到对应的INI文件条目";
  504. case -82:
  505. return "没有进行初始化服务工作。";
  506. case -252:
  507. return "密码不正确";
  508. case -1088:
  509. return "发送数据错误";
  510. case -1089:
  511. return "获取数据错误";
  512. case -1092:
  513. return "找不到对应的服务端操作码";
  514. case -1093:
  515. return "表示连接服务时错误";
  516. case -1095:
  517. return "获取主机名称失败";
  518. case -1097:
  519. return "建立套字接错误";
  520. case -1098:
  521. return "绑定套字节端口错误";
  522. case -1099:
  523. return "表示无效连接,不能进行相关的操作。";
  524. case -2002:
  525. return "表示监听时产生错误";
  526. case -2003:
  527. return "表示发送的数据长度与接收的数据长度不相符";
  528. case -2005:
  529. return "表示当前服务不存在任何连接";
  530. case -2006:
  531. return "表示当前查询节点超出集合范范围";
  532. case -2009:
  533. return "表示关闭连接错误";
  534. case -1052:
  535. return "可能是输入的授权号不正确。";
  536. case -1053:
  537. return "系统上没有任何智能锁。";
  538. default:
  539. return "未知错误代码";
  540. }
  541. }
  542. }
  543. }