本帖最后由 linghive 于 2009-06-11 15:19:05 编辑

解决方案 »

  1.   

    让你传空了:Icnum:传空 =>icnum:=pchar('0'); 
    还有就是你报告什么错误啊?
      

  2.   

      错误提示 Access violation at address 00378dc  in module 'PostTransact.dll'
      

  3.   

    声明成数组传进去 即array[0..20] of char形式
      

  4.   

    DLL函数
    ( procedure AddCardScore(icnum,trncd,billnum,trnamt,opercd,CardScore,Suc_flg:PChar);stdcall;external 'PostTransact.dll';
    )
    //-------------------------------------------------------
    procedure TForm1.Button2Click(Sender: TObject);
    var
       //{ icnum:pchar;  //传空                 A    string
       // trncd:pchar;  // 消费交易代码        A    string
     // billnum:pchar;  //销售点帐单号         A    string
      // trnamt:pchar;  //消费金额             A    string
      // opercd:pchar;  //挂帐操作员代码       A    string
    //CardScore:pchar;
     // suc_flg:pchar;  //挂帐成败标志         A    string }
      params:array[1..7] of Pchar;
    begin
       //{   icnum:=pchar('');
      //    trncd:=pchar('001');
      //  billnum:=pchar('A123');
      //   trnamt:=pchar('100.00');
       //  opercd:=pchar('CA00');
     // CardScore:=pchar('5');
      //  suc_flg:=pchar('1'); }    params[1]:=pchar('');
        params[2]:=pchar('002');
        params[3]:=pchar('A123');
        params[4]:=pchar('100');
        params[5]:=pchar('CA00');
        params[6]:=pchar('10');
        params[7]:=pchar('0');
        try
           // AddCardScore(icnum,trncd,billnum,trnamt,opercd,CardScore,Suc_flg);
           AddCardScore(params[1],params[2],params[3],params[4],params[5],params[6],params[7]);
        except
             showmessage('不正确.');
        end;
    end;声明成数组传进去是象我上面这样的吗?还是有问题啊错误提示 Access violation at address 00378dc  in module 'PostTransact.dll'
      

  5.   

    'PostTransact.dll'中的代码是怎样的,可能是dll内部错误,另外空值你指的是什么,nil还是'0'还是'',这些对dll内部代码处理时,可能会引起错误
      

  6.   

    'PostTransact.dll'中的代码是其他公司提供的,接口主要涉及到收入数据的传送和会员卡的使用问题,下面详细说明:
    一. 在其他厂商销售点中付现金
    调用动态库PostTransact.dll中的挂账函数
    Procedure PostTransaction(icnum,trnamt,billnum,paytrncd,trncd,opercd,notice,suc_flg,Err_Msg,
    nolimit:pchar);stdcall;external ‘PostTransact.dll’
    参数说明:均为必输参数
    Icnum:传空
    Trnamt:消费金额
    Billnum:销售点帐单号
    Paytrncd:付款交易代码(即人民币、信用卡等付款方式在酒店系统中配置的相应交易代码)
    Trncd:消费交易代码(销售点在中软系统中配置的交易代码)
    Opercd:挂帐操作员代码
    Notice:交易注释
    Suc_flg     返回的结果参数('1'  挂帐成功,'0'  挂帐失败)
    Err_Msg     返回的挂帐错误原因
    Nolimit:’0’ 超限强制挂帐,’1’ 超限不挂
      

  7.   

    所有参数都声明成array[0..20] of char形式,不是:params:array[1..7] of Pchar; 
      

  8.   


    var 
        icnum:array[0..20]of char;  //传空                
      trnamt:array[0..20]of char;  //消费金额            
      billnum:array[0..20]of char;  //销售点帐单号      
    paytrncd:array[0..20]of char;  //付款交易代码        
        trncd:array[0..20]of char;  // 消费交易代码      
      opercd:array[0..20]of char;  //挂帐操作员代码    
      notice:array[0..20]of char;  //交易注释                                                
      suc_flg:array[0..20]of char;  //挂帐成败标志        
      Err_Msg:array[0..20]of char;  //错误原因            
      nolimit:array[0..20]of char;他可能是用strpcopy往出传值的,你声明称pchar就会有问题了