问题:Delphi 封装类转net C# 问题
描述:

delphi.netclass


unit WXYBDLL;
interface
USES Windows, Messages,ADODB,FORMS,StrUtils;
const
  FWJGBH = '1000111'; //服务机构编号
VAR
 outstring:PCHAR;
 lsh,zqh:String; //流水号,周期号
 YBRYLB:string;//无锡用医保人员类别  在读卡时取出该人员类别
 ybzycs:String;//医保病人本年住院次数
 ybgrbh:String;//医保个人编号
 UserID:String='002';
function InOutString(ybjybh,ywzqh,jylsh:string;instring:PChar):Integer; //调用医保DLL动态库文件
function YBLSH(bm:STRING=FWJGBH; FieldName:String='交易流水号'): String;
function ywzqh(jylsh:string):string;     //签到后获取该操作员在医保的 业务周期号
procedure YBRCXX;  //获取交易流水号和业务周期号  这两个号都不能为空
function getstr(Ystr,Mstr:string;istar:byte):string; //从字符串中截取字符串
procedure ShowMsg(sMsg: string);
function MsgBox(Text, Caption: string; Flags: Longint = MB_OK): Integer;
function ZfInOutString(jybh:string;instring:PChar):Integer; //自费参数  jybh 交易编号信息 (700001批次号 700002挂号 700003明细 700004结算)    instring 入参信息 即数据
implementation
uses SysUtils,Dialogs, CFMmain;
 function BUSINESS_HANDLE(inputData,outputdata:PCHAR):integer;stdcall;external 'SiInterface.dll';
{
备注:
       如果下载的是文件,则必须在服务器的D盘建立一个文件夹,且在本机共享,然后在本机设置镜像盘符为X
    ,后才能用该系统管理程序,因为下载的文件需要用SQL语句来执行,SQL语句中的路径为数据库服务器的路径,
    所以必须指定,否则SQL检测不到这个文件,所以在从医保中心下载完后,必须上传到服务器上,才能够用SQL
    语句进行写到数据库中。
}
function InOutString(ybjybh,ywzqh,jylsh:string;instring:PChar):Integer; //调用医保DLL动态库文件        其它医院不用,应该把调用这个程序的全部屏蔽,否则提示找不到动态库文件
VAR
 I:Integer;
BEGIN
  Result:=0;//成功
  instring:=pchar(ybjybh+'^'+FWJGBH+'^'+UserID+'^'+ywzqh+'^1^'+jylsh+'^NULL^'+instring+'^');
  try
    freemem(outstring,10240000);  //放在此处目的是为了,马上不清除出参.后面要用出参
    getmem(outstring,10240000);
    I:=BUSINESS_HANDLE(instring,outstring);
    IF I=-1 THEN
      BEGIN
        try
          I:=StrToInt(getstr(outstring,'^',2));
        except
          ShowMsg(outstring+' 请检查网络是否正常!');
        end;
        outstring:=PCHAR(getstr(outstring,'^',1));
        IF I=10 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'当前交易成功但是不能进行下一步业务处理(个人封锁等信息)!');
            Result:=I;
          END;
        IF I=71 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'无效的交易类型!');
            Result:=I;
          END;
        IF I=98 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'医院开发商分配输出内存空间太小!');
            Result:=I;
          END;
        IF I=99 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'业务处理失败!');
            Result:=I;
          END;
        Abort;
      end;
  except
    Result:=100;//自己定义的,表示出错后不再继续进行
//    freemem(outstring,1024);
    Abort;
  end;
//  freemem(outstring,1024);
END;
///////无锡医保 获取交易流水号 在MAXHM表中必须有  交易流水号 记录,否则系统错误
// bm: 医疗机构编号
//FieldName  意义为字段FNAME的内容 即在这里赋值(交易流水号)
function YBLSH(bm:STRING=FWJGBH; FieldName:String='交易流水号'): String;
var
  sInitVal, sSQL : String;
  MYQRY:TADOQuery;
begin
  try
    MYQRY:=TADOQuery.Create(Application);
    MYQRY.Connection:=fmmain.ADO_con;
    sInitVal:=FormatDateTime('YYYYMMDDhhmmss',Now);
    with MYQRY do begin
      Close;
      SQL.Clear;
      SQL.Text := 'select rq,fname from maxh where fname='''+trim(FieldName)+'''';
      open;
      if (FieldByName('fname').AsString='') then
        begin
          Close;
          SQL.Clear;
          SQL.Text := 'insert into maxh (rq,fname,maxhm) values (getdate(),:fname,1)';
          MYQRY.Parameters.ParamByName('fname').Value :=trim(FieldName);
          execsql;
        end
      else
        if (FormatDateTime('YYYYMMDDhhmm',FieldByName('rq').AsDateTime)<>FormatDateTime('YYYYMMDDhhmm',Now)) then
          begin
            Close;
            SQL.Clear;
            SQL.Text := 'update maxh set rq=getdate(),maxhm=1 where fname='''+trim(FieldName)+'''';
            execsql;
          end
      else
        begin
          Close;
          SQL.Clear;
          SQL.Text := 'update maxh set maxhm=maxhm+1 where fname='''+trim(FieldName)+'''';
          execsql;
        end ;
      Close;
      SQL.Clear;
      SQL.Text := 'select fname,maxhm from maxh with(ROWLOCK) where fname='''+trim(FieldName)+'''';
      open;
      if MYQRY.FieldByName('fname').AsString = '' then
        begin
          Result := sInitVal+bm+'001';
          Exit;
        end;
      Result :=sInitVal+bm+ RightStr('00000' + trim(IntToStr(MYQRY.FieldByName('maxhm').AsInteger+1)), 3);
      MYQRY.Close;
    end;
  except
    Result :=  sInitVal+bm +RightStr('00000' + trim(IntToStr(MYQRY.FieldByName('maxhm').AsInteger+1)), 3);
    MYQRY.Close;
    MYQRY.SQL.Clear;
    MYQRY.SQL.Text := 'update maxh with(ROWLOCK) set maxhm=maxhm+1 where fname='''+trim(FieldName)+'''';
    MYQRY.execsql;
    MYQRY.Close;
  end;
end;
function ywzqh(jylsh:string):string;     //签到后获取该操作员在医保的 业务周期号
begin
   //YWZQH 业务周期号     医院编号(7)+操作员编号(最大8位)+时间(14)+流水号(3)    --收费员在签到时获以业务周期号
   InOutString('931100','',jylsh,'');
   Result:=string(getstr( getstr(outstring,'^',1),'|',0));  //医保业务周期号
end;
procedure YBRCXX;  //获取交易流水号和业务周期号  这两个号都不能为空          其它医院不用,应该把调用这个程序的全部屏蔽,否则提示找不到动态库文件
BEGIN
  lsh:='';
  zqh:='';
  lsh:=YBLSH; //交易流水号
  IF lsh='' THEN
    BEGIN
      ShowMsg('请与管理员联系,可能是最大号表无此记录!');
      Abort;
    END;
  zqh:=ywzqh(lsh);
  IF zqh='' THEN
    BEGIN
      ShowMsg('请重试!');
      Abort;
    END;
END;
//获取像    dfsd_ad_中华人民共和国_大_
// 字符串,特征,第几个    例  getstr('dfsd_ad_中华人民共和国_大_','_',2)  得 ad
function getstr(Ystr,Mstr:string;istar:byte):string; //从字符串中截取字符串
var s:string;
i:byte;
begin
result:='';
i:=0;
for i:=0 to length(Ystr) do
    if i<>
    delete(Ystr,1,pos(Mstr,Ystr)) else
    break;
s:=copy(Ystr,i-istar-1,pos(Mstr,Ystr)-1);
delete(s,1,length(Mstr)-1);
if s<>'' then
result:=s else
result:='';//提取串为空串!'
end;
procedure ShowMsg(sMsg: string);
begin
  MsgBox(sMsg, '提示', MB_OK);
end;
function MsgBox(Text, Caption: string; Flags: Longint = MB_OK): Integer;
begin
  Result := Application.MessageBox(PChar(Text), pChar(Caption), Flags +
      MB_ICONASTERISK);
end;
function ZfInOutString(jybh:string;instring:PChar):Integer; //自费参数  jybh 交易编号信息 (700001批次号 700002挂号 700003明细 700004结算)    instring 入参信息 即数据
VAR
 I:Integer;
BEGIN
  Result:=0;//成功
  instring:=pchar(jybh+'^'+FWJGBH+'^^^^^^'+instring+'^');
  try
    freemem(outstring,10240000);  //放在此处目的是为了,马上不清除出参.后面要用出参
    getmem(outstring,10240000);
    I:=BUSINESS_HANDLE(instring,outstring);
    IF I=-1 THEN
      BEGIN
        try
          I:=StrToInt(getstr(outstring,'^',2));
        except
          ShowMsg(outstring+' 请检查网络是否正常!');
        end;
        outstring:=PCHAR(getstr(outstring,'^',1));
        IF I=10 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'当前交易成功但是不能进行下一步业务处理(个人封锁等信息)!');
            Result:=I;
          END;
        IF I=71 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'无效的交易类型!');
            Result:=I;
          END;
        IF I=98 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'医院开发商分配输出内存空间太小!');
            Result:=I;
          END;
        IF I=99 THEN
          BEGIN
            ShowMessage(outstring+CHR(13)+'业务处理失败!');
            Result:=I;
          END;
        Abort;
      end;
  except
    Result:=100;//自己定义的,表示出错后不再继续进行
//    freemem(outstring,1024);
    Abort;
  end;
//  freemem(outstring,1024);
END;
end.

求这个类.net C# 版本 谢谢

上一篇关于Delphi6的窗体文件DFM里面的IconData转换方法
下一篇Delphi7 递归删除树状节点的问题
明星图片
相关文章
《Delphi 封装类转net C# 问题》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)