CardReader.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642
  1. /******************************************************************************
  2. * 文件名称: CardReader.cs
  3. * 文件说明: 读卡的封装,包括社保卡,身份证,电子凭证等等
  4. * 当前版本: V1.0
  5. * 创建日期: 2022-06-20
  6. *
  7. * * 2020-06-20: 增加 CardReader 类
  8. * ***** 2020-06-20: 增加 CardReader 方法,获取URL地址,USER信息,地方版SSCard.dll使用
  9. * ***** 2020-06-20: 增加 CardReader 方法重载,国家版电子凭证使用
  10. * ***** 2020-06-20: 增加 Init 方法,SSCard环境初始化
  11. * ***** 2020-06-20: 增加 ReadCardBas 方法,读社保卡
  12. * ***** 2020-06-20: 增加 VerifyPIN 方法,验证密码
  13. * ***** 2020-06-20: 增加 ChangePIN 方法,修改密码
  14. * ***** 2020-06-20: 增加 ReadSFZ 方法,读身份证
  15. * ***** 2020-06-20: 增加 GetQRBase 方法,读二维码
  16. * ***** 2020-06-20: 增加 NationEcTrans 方法,读电子凭证(国家版)
  17. ******************************************************************************/
  18. using System;
  19. using System.Collections.Generic;
  20. using System.Linq;
  21. using System.Reflection;
  22. using System.Runtime.InteropServices;
  23. using System.Text;
  24. using System.Threading.Tasks;
  25. using PTMedicalInsurance.Variables;
  26. using System.Windows.Forms;
  27. namespace PTMedicalInsurance.Common
  28. {
  29. class CardReaderCom
  30. {
  31. [DllImport("ShouXinCom.dll", EntryPoint = "Open", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  32. static extern int Open(StringBuilder pOutBuff);
  33. [DllImport("ShouXinCom.dll", EntryPoint = "Close", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  34. static extern int Close(StringBuilder pOutBuff);
  35. [DllImport("ShouXinCom.dll", EntryPoint = "GetPersonClass_Multimedia", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  36. static extern int GetPersonClass_Multimedia(StringBuilder InData, StringBuilder pOutBuff);
  37. [DllImport("ShouXinCom.dll", EntryPoint = "GetPersonInfo_Multimedia", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  38. static extern int GetPersonInfo_Multimedia(StringBuilder InData, StringBuilder pOutBuff);
  39. [DllImport("ShouXinCom.dll", EntryPoint = "GetPersonInfoNation_Multimedia", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  40. static extern int GetPersonInfoNation_Multimedia(StringBuilder InData, StringBuilder pOutBuff);
  41. public CardReaderCom()
  42. {
  43. }
  44. public int Open(out string OutMsg)
  45. {
  46. OutMsg = "";
  47. int rtn = -1;
  48. try
  49. {
  50. StringBuilder sbOutMsg = new StringBuilder(1024);
  51. rtn = Open(sbOutMsg);
  52. OutMsg = sbOutMsg.ToString();
  53. return rtn;
  54. }
  55. catch (Exception ex)
  56. {
  57. OutMsg = "Open异常:" + ex.Message;
  58. return rtn;
  59. }
  60. }
  61. public int Close(out string OutMsg)
  62. {
  63. OutMsg = "";
  64. int rtn = -1;
  65. try
  66. {
  67. StringBuilder sbOutMsg = new StringBuilder(1024);
  68. rtn = Close(sbOutMsg);
  69. OutMsg = sbOutMsg.ToString();
  70. return rtn;
  71. }
  72. catch (Exception ex)
  73. {
  74. OutMsg = "Close异常:" + ex.Message;
  75. return rtn;
  76. }
  77. }
  78. public int GetPersonClass_Multimedia(string sInput,out string OutMsg)
  79. {
  80. OutMsg = "";
  81. int rtn = -1;
  82. try
  83. {
  84. StringBuilder sbInput = new StringBuilder(sInput);
  85. StringBuilder sbOutMsg = new StringBuilder(1024);
  86. rtn = GetPersonClass_Multimedia(sbInput, sbOutMsg);
  87. OutMsg = sbOutMsg.ToString();
  88. return rtn;
  89. }
  90. catch (Exception ex)
  91. {
  92. OutMsg = "GetPersonClass_Multimedia异常:" + ex.Message;
  93. return rtn;
  94. }
  95. }
  96. public int GetPersonInfo_Multimedia(string sInput, out string OutMsg)
  97. {
  98. OutMsg = "";
  99. int rtn = -1;
  100. try
  101. {
  102. StringBuilder sbInput = new StringBuilder(sInput);
  103. StringBuilder sbOutMsg = new StringBuilder(1024);
  104. rtn = GetPersonInfo_Multimedia(sbInput, sbOutMsg);
  105. OutMsg = sbOutMsg.ToString();
  106. return rtn;
  107. }
  108. catch (Exception ex)
  109. {
  110. OutMsg = "GetPersonInfo_Multimedia异常:" + ex.Message;
  111. return rtn;
  112. }
  113. }
  114. public int GetPersonInfoNation_Multimedia(string sInput, out string OutMsg)
  115. {
  116. OutMsg = "";
  117. int rtn = -1;
  118. try
  119. {
  120. StringBuilder sbInput = new StringBuilder(sInput);
  121. StringBuilder sbOutMsg = new StringBuilder(1024);
  122. rtn = GetPersonInfoNation_Multimedia(sbInput, sbOutMsg);
  123. OutMsg = sbOutMsg.ToString();
  124. return rtn;
  125. }
  126. catch (Exception ex)
  127. {
  128. OutMsg = "GetPersonInfoNation_Multimedia异常:" + ex.Message;
  129. return rtn;
  130. }
  131. }
  132. }
  133. /// <summary>
  134. /// 通用读卡动态库调用
  135. /// </summary>
  136. class CardReader
  137. {
  138. const string DllPath = @"D:\CardDLL\SSCard.dll";
  139. [DllImport("SSCard.dll", EntryPoint = "Init", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  140. static extern int Init(StringBuilder pURL, StringBuilder pUser);
  141. [DllImport("SSCard.dll", EntryPoint = "ReadCardBas", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  142. static extern int ReadCardBas(StringBuilder pOutBuff, int nOutBuffLen, StringBuilder pSignBuff, int nSignBuffLen);
  143. [DllImport("SSCard.dll", EntryPoint = "VerifyPIN", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  144. static extern int VerifyPIN(StringBuilder pOutBuff, int nOutBuffLen);
  145. [DllImport("SSCard.dll", EntryPoint = "ChangePIN", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  146. static extern int ChangePIN(StringBuilder pOutBuff, int nOutBuffLen);
  147. [DllImport("SSCard.dll", EntryPoint = "ReadSFZ", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  148. static extern int ReadSFZ(StringBuilder pOutBuff, int nOutBuffLen, StringBuilder pSignBuff, int nSignBuffLen);
  149. [DllImport("SSCard.dll", EntryPoint = "GetQRBase", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  150. static extern int GetQRBase(int nTimeout, StringBuilder pOutBuff, int nOutBuffLen, StringBuilder pSignBuff, int nSignBuffLen);
  151. //电子凭证
  152. [DllImport("NationECCode.dll", EntryPoint = "NationEcTrans", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  153. static extern IntPtr NationEcTrans(StringBuilder strUrl, StringBuilder InData, StringBuilder OutData);
  154. private string URL;
  155. private string User;
  156. public CardReader()
  157. {
  158. }
  159. public CardReader(string URL, string User)
  160. {
  161. this.URL = URL;
  162. this.User = User;
  163. }
  164. public int Init()
  165. {
  166. string errMsg = "";
  167. int result = -1;
  168. try
  169. {
  170. StringBuilder sbURL = new StringBuilder(URL);
  171. StringBuilder sbUSER = new StringBuilder(User);
  172. result = Init(sbURL, sbUSER);
  173. return result;
  174. }
  175. catch (Exception ex)
  176. {
  177. errMsg = ex.Message;
  178. return result;
  179. }
  180. finally
  181. {
  182. Global.writeLog("初始化", URL + ":" + User, result.ToString() + ":" + errMsg);
  183. }
  184. }
  185. public int ReadCardBas(out string basInfo, out string regInfo)
  186. {
  187. basInfo = ""; regInfo = "";
  188. int rtn = -1;
  189. try
  190. {
  191. StringBuilder sbBasInfo = new StringBuilder(1024);
  192. StringBuilder sbRegInfo = new StringBuilder(1024);
  193. rtn = ReadCardBas(sbBasInfo, 1024, sbRegInfo, 1024);
  194. basInfo = sbBasInfo.ToString();
  195. regInfo = sbRegInfo.ToString();
  196. return rtn;
  197. }
  198. catch (Exception ex)
  199. {
  200. basInfo = "ReadCardBas异常:" + ex.Message;
  201. return rtn;
  202. }
  203. finally
  204. {
  205. Global.writeLog("读社保卡(" + URL + ")", regInfo, basInfo);
  206. }
  207. }
  208. public int VerifyPIN(out string outBuff)
  209. {
  210. outBuff = "";
  211. int rtn = -1;
  212. try
  213. {
  214. StringBuilder sbOutBuff = new StringBuilder(1024);
  215. rtn = VerifyPIN(sbOutBuff, 1024);
  216. outBuff = sbOutBuff.ToString();
  217. return rtn;
  218. }
  219. catch (Exception ex)
  220. {
  221. outBuff = "VerifyPIN:" + ex.Message;
  222. return rtn;
  223. }
  224. }
  225. public int ChangePIN(out string outBuff)
  226. {
  227. outBuff = "";
  228. int rtn = -1;
  229. try
  230. {
  231. StringBuilder sbOutBuff = new StringBuilder(1024);
  232. rtn = ChangePIN(sbOutBuff, 1024);
  233. outBuff = sbOutBuff.ToString();
  234. return rtn;
  235. }
  236. catch (Exception ex)
  237. {
  238. outBuff = "ChangePIN:" + ex.Message;
  239. return rtn;
  240. }
  241. }
  242. public int ReadSFZ(out string OutBuff, out string SignBuff)
  243. {
  244. OutBuff = ""; SignBuff = "";
  245. int rtn = -1;
  246. try
  247. {
  248. StringBuilder sbOutBuff = new StringBuilder(1024);
  249. StringBuilder sbSignBuff = new StringBuilder(1024);
  250. rtn = ReadSFZ(sbOutBuff, 1024, sbSignBuff, 1024);
  251. OutBuff = sbOutBuff.ToString();
  252. SignBuff = sbSignBuff.ToString();
  253. return rtn;
  254. }
  255. catch (Exception ex)
  256. {
  257. OutBuff = "ReadSFZ 异常:" + ex.Message;
  258. return rtn;
  259. }
  260. }
  261. public int GetQRBase(int timeout, out string OutBuff, out string SignBuff)
  262. {
  263. OutBuff = ""; SignBuff = "";
  264. int rtn = -1;
  265. try
  266. {
  267. StringBuilder sbOutBuff = new StringBuilder(1024);
  268. StringBuilder sbSignBuff = new StringBuilder(1024);
  269. rtn = GetQRBase(timeout, sbOutBuff, 1024, sbSignBuff, 1024);
  270. OutBuff = sbOutBuff.ToString();
  271. SignBuff = sbSignBuff.ToString();
  272. return rtn;
  273. }
  274. catch (Exception ex)
  275. {
  276. OutBuff = "GetQRBase 异常:" + ex.Message;
  277. return rtn;
  278. }
  279. }
  280. public string NationEcTrans(string URL, string InData, out string OutData)
  281. {
  282. OutData = "";
  283. try
  284. {
  285. StringBuilder sbURL = new StringBuilder(URL);
  286. StringBuilder sbInData = new StringBuilder(InData);
  287. StringBuilder sbOutData = new StringBuilder(1024);
  288. IntPtr pRtn = NationEcTrans(sbURL, sbInData, sbOutData);
  289. OutData = sbOutData.ToString();
  290. string rtn = Marshal.PtrToStringAnsi(pRtn);
  291. return rtn;
  292. }
  293. catch (Exception ex)
  294. {
  295. OutData = "NationEcTrans 异常:" + ex.Message;
  296. return "-1";
  297. }
  298. finally
  299. {
  300. Global.writeLog("电子凭证(" + URL + ")", InData, OutData);
  301. }
  302. }
  303. }
  304. /// <summary>
  305. /// 黑龙江读卡动态库调用
  306. /// </summary>
  307. class CardReader_HLJ
  308. {
  309. string progID = "SCardDriverHLJ.SCard";
  310. System.Type ComType;
  311. object ComInstance;
  312. public CardReader_HLJ()
  313. {
  314. ComType = Type.GetTypeFromProgID(progID);
  315. // 创建Com的实例
  316. if (ComType != null)
  317. {
  318. //创建实例
  319. ComInstance = Activator.CreateInstance(ComType);
  320. }
  321. }
  322. public string readCardBas(int type, string hospNO)
  323. {
  324. if (ComType == null)
  325. {
  326. return "ComType为空!";
  327. }
  328. if (ComInstance == null)
  329. {
  330. return "ComInstance为空!";
  331. }
  332. try
  333. {
  334. //设置需要设置的参数值
  335. object[] ParamArray = new object[2];
  336. ParamArray[0] = type;
  337. ParamArray[1] = hospNO;
  338. ParameterModifier[] ParamMods = new ParameterModifier[1];
  339. ParamMods[0] = new ParameterModifier(2); // 初始化为接口参数的个数
  340. ParamMods[0][0] = true;
  341. ParamMods[0][1] = true; // 设置第二个参数为返回参数,调用含有ParameterModifier数组的重载函数
  342. object o = ComType.InvokeMember("iReadCardBas", // 接口函数名
  343. BindingFlags.Default | BindingFlags.InvokeMethod,
  344. null,
  345. ComInstance, // 调用的COM组件
  346. ParamArray, // 参数数组
  347. ParamMods, // 指定返回参数的ParameterModifier数组
  348. null,
  349. null);
  350. //string Msg = "加载成功:" + ParamArray[1].ToString();
  351. //Global.inf.writeLog(Msg + "___" + ParamArray[0].ToString());
  352. return o.ToString();
  353. }
  354. catch (Exception ex)
  355. {
  356. return "异常:" + ex.Message;
  357. }
  358. }
  359. }
  360. /// <summary>
  361. /// 河南读卡动态库调用
  362. /// </summary>
  363. class CardReader_HN
  364. {
  365. //电子凭证
  366. [DllImport("NationECCode.dll", EntryPoint = "NationEcTrans", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  367. static extern IntPtr NationEcTrans(StringBuilder strUrl, StringBuilder InData, StringBuilder OutData);
  368. //社保卡-本地
  369. [DllImport("SSCardDriver.dll", EntryPoint = "iReadCardBas", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  370. static extern int ReadCardBas(int iType, StringBuilder pDevInfo, StringBuilder pOutInfo);
  371. //社保卡-异地1
  372. [DllImport("SSCardDriver.dll", EntryPoint = "iReadCardBas_HSM_Step1", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  373. static extern int ReadCardBas_HSM_Step1(int iType, StringBuilder pDevInfo, StringBuilder pOutInfo);
  374. //社保卡-异地2
  375. [DllImport("SSCardDriver.dll", EntryPoint = "iReadCardBas_HSM_Step2", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  376. static extern int ReadCardBas_HSM_Step2(StringBuilder pKey, StringBuilder pOutInfo);
  377. //社保卡-PIN校验
  378. [DllImport("SSCardDriver.dll", EntryPoint = "iVerifyPIN", CharSet = CharSet.Ansi, ExactSpelling = false, CallingConvention = CallingConvention.StdCall)]
  379. static extern int VerifyPIN(int iType, StringBuilder pOutInfo);
  380. public int ReadCardBas(int iType, string sDevInfo, out string sOutInfo)
  381. {
  382. sOutInfo = "";
  383. int rtn = -1;
  384. try
  385. {
  386. StringBuilder bDevInfo = new StringBuilder(sDevInfo);
  387. StringBuilder bOutInfo = new StringBuilder(1024);
  388. rtn = ReadCardBas(iType, bDevInfo, bOutInfo);
  389. sOutInfo = bOutInfo.ToString();
  390. return rtn;
  391. }
  392. catch (Exception ex)
  393. {
  394. sOutInfo = "ReadCardBas异常:" + ex.Message;
  395. return rtn;
  396. }
  397. finally
  398. {
  399. Global.writeLog("调用社保卡ReadCardBas函数:",sDevInfo, sOutInfo);
  400. }
  401. }
  402. public int VerifyPIN(int iType, out string sOutInfo)
  403. {
  404. sOutInfo = "";
  405. int rtn = -1;
  406. try
  407. {
  408. StringBuilder bOutInfo = new StringBuilder(1024);
  409. rtn = VerifyPIN(iType, bOutInfo);
  410. sOutInfo = bOutInfo.ToString();
  411. return rtn;
  412. }
  413. catch (Exception ex)
  414. {
  415. sOutInfo = "iVerifyPIN异常:" + ex.Message;
  416. return rtn;
  417. }
  418. finally
  419. {
  420. Global.writeLog("调用社保卡iVerifyPIN函数:", iType.ToString(), sOutInfo);
  421. }
  422. }
  423. public int ReadCardBas_HSM_Step1(int iType, string sDevInfo, out string sOutInfo)
  424. {
  425. sOutInfo = "";
  426. int rtn = -1;
  427. try
  428. {
  429. StringBuilder bDevInfo = new StringBuilder(sDevInfo);
  430. StringBuilder bOutInfo = new StringBuilder(1024);
  431. rtn = ReadCardBas_HSM_Step1(iType, bDevInfo, bOutInfo);
  432. sOutInfo = bOutInfo.ToString();
  433. return rtn;
  434. }
  435. catch (Exception ex)
  436. {
  437. sOutInfo = "ReadCardBas_HSM_Step1异常:" + ex.Message;
  438. return rtn;
  439. }
  440. finally
  441. {
  442. Global.writeLog("调用社保卡ReadCardBas_HSM_Step1函数:", iType+"|"+ sDevInfo, sOutInfo);
  443. }
  444. }
  445. public int ReadCardBas_HSM_Step2(string pKey, out string sOutInfo)
  446. {
  447. sOutInfo = "";
  448. int rtn = -1;
  449. try
  450. {
  451. StringBuilder bPKey = new StringBuilder(pKey);
  452. StringBuilder bOutInfo = new StringBuilder(1024);
  453. rtn = ReadCardBas_HSM_Step2(bPKey, bOutInfo);
  454. sOutInfo = bOutInfo.ToString();
  455. return rtn;
  456. }
  457. catch (Exception ex)
  458. {
  459. sOutInfo = "ReadCardBas_HSM_Step2异常:" + ex.Message;
  460. return rtn;
  461. }
  462. finally
  463. {
  464. Global.writeLog("调用社保卡ReadCardBas_HSM_Step2函数:", pKey, sOutInfo);
  465. }
  466. }
  467. public string NationEcTrans(string URL, string InData, out string OutData)
  468. {
  469. OutData = "";
  470. try
  471. {
  472. StringBuilder sbURL = new StringBuilder(URL);
  473. StringBuilder sbInData = new StringBuilder(InData);
  474. StringBuilder sbOutData = new StringBuilder(1024);
  475. IntPtr pRtn = NationEcTrans(sbURL, sbInData, sbOutData);
  476. OutData = sbOutData.ToString();
  477. //MessageBox.Show("电子凭证NationEcTrans返回的:" + pRtn);
  478. string rtn = Marshal.PtrToStringAnsi(pRtn);
  479. return rtn;
  480. }
  481. catch (Exception ex)
  482. {
  483. OutData = "NationEcTrans 异常:" + ex.Message;
  484. return "";
  485. }
  486. finally
  487. {
  488. Global.writeLog("电子凭证(" + URL + ")", InData, OutData);
  489. }
  490. }
  491. }
  492. class CardReader_BJ
  493. {
  494. string progID = "MedicareCom.Outpatient";
  495. System.Type ComType;
  496. object ComInstance;
  497. public CardReader_BJ()
  498. {
  499. ComType = Type.GetTypeFromProgID(progID);
  500. // 创建Com的实例
  501. if (ComType != null)
  502. {
  503. //创建实例
  504. ComInstance = Activator.CreateInstance(ComType);
  505. }
  506. }
  507. public void Myobject(string FunName, string input, out string output)
  508. {
  509. try
  510. {
  511. Type ShouXinComType = System.Type.GetTypeFromProgID("MedicareCom.Outpatient");
  512. if (ShouXinComType != null)
  513. {
  514. //创建实例,不能再次创建,否则会提示没有初始化
  515. object ShouXinComInstance = System.Activator.CreateInstance(ShouXinComType);
  516. if (ShouXinComInstance == null)
  517. {
  518. output = "创建实列失败,实例不存在!";
  519. return;
  520. }
  521. Global.writeLog("【"+FunName + "】入参input:" + input);
  522. //设置需要设置的参数值
  523. object[] ParamArray = new object[1];
  524. ParamArray[0] = input;
  525. //ParamArray[1] = input;
  526. ParameterModifier[] ParamMods = new ParameterModifier[1];
  527. ParamMods[0] = new ParameterModifier(1); // 初始化为接口参数的个数
  528. ParamMods[0][0] = true;
  529. ShouXinComType.InvokeMember(FunName, // 接口函数名
  530. BindingFlags.Default | BindingFlags.InvokeMethod,
  531. null,
  532. ShouXinComInstance, // 调用的COM组件
  533. ParamArray, // 参数数组
  534. ParamMods, // 指定返回参数的ParameterModifier数组
  535. null,
  536. null);
  537. output = ParamArray[0].ToString();
  538. //MessageBox.Show("Com输出:" + output);
  539. Global.writeLog(FunName,"入参input:" + input, output);
  540. }
  541. else
  542. {
  543. output = "北京首信医保COM加载失败!";
  544. //MessageBox.Show("COM加载失败!");
  545. }
  546. }
  547. catch (Exception ex)
  548. {
  549. output = ex.Message;
  550. MessageBox.Show("COM加载异常!" + output);
  551. }
  552. }
  553. }
  554. }