此问题是 接口调用对方程序的 DLL 文件代码一执行到这里
  sucess := ExpenseCalc(YJtype, chr_lb
  ,pchar(rq)
  ,pchar(cb_name)
  ,pchar(xulh)
  ,pchar(card)
  ,pchar(invono)
  ,AppCode,DataBuffer);
就提示 external exception c0000008 这个错误
第一部分是 对方DLL 文件 函数的原型
第二部分是我声明的函数 和过程 问题是代码一运行到下面是对方DLL函数原型Syntax:
  Int ExpenseCalc(int TransKind,
  int MedKind,
char* SysDate,
char* UserName,
char* BillNo,
char* MedCardNo,
char* InHosNo,
int* AppCode,  
char* DataBuffer)Delphi(Pascal) code
Function ExpenseCalc(TransKind, MedKind : Integer; SysDate,UserName,BillNo, MedCardNo, InHosNo :Pchar;
              AppCode:PInteger;DataBuffer :Pchar):Integer;export;stdcall;far;external DllName name 'ExpenseCalc';procedure TFrmmin.GetYBExpenseCalc(YJtype,yb_lb: integer; HeadInfo: TTable; var sucess: Integer; var omt_msg: wideString);
var
  DataBuffer  :pchar;
  AppCode     :PInteger;
  s_str :String;
  chr_lb : integer;
  rq ,cb_name,xulh,card,invono  :String;begin
  try
     if yb_lb=0 then  chr_lb :=1
      else  chr_lb :=3;
     sucess := -1;
     GetMem(DataBuffer,8000);
     GetMem(AppCode,8);
     try             //  
      rq := formatdatetime('yyyymmddhhnnss',now);
      cb_name := HeadInfo.FieldByName('CB_NAME').AsString;
      xulh := HeadInfo.FieldByName('XULH').AsString ;
      card := HeadInfo.FieldByName('IC_CARD').AsString;
      invono := HeadInfo.FieldByName('InvoiceNo').AsString;
       sucess := ExpenseCalc(YJtype, chr_lb
                            ,pchar(rq)
                            ,pchar(cb_name)
                            ,pchar(xulh)
                            ,pchar(card)
                            ,pchar(invono)
                            ,AppCode,DataBuffer);       if  sucess =-1 then
       begin
          omt_msg := inttostr(AppCode^)+ strpas(DataBuffer)  ;
          DM_POS.InsertLogREcord(DM_POS.CHeadInfo.FieldByName('DKTID').asstring ,
                 DM_POS.CHeadInfo.FieldByName('xulh').asstring ,
                 '结获取信息',
                 strpas(DataBuffer) ,
                 'ExpenseCalc',
                 DM_POS.CHeadInfo.FieldByName('RIQI').asstring );
       end
        else  omt_msg := inttostr(AppCode^)+ strpas(DataBuffer);
     except
        omt_msg := '失败,请检查网络是否正常!:'+ strpas(DataBuffer);     end;
  finally
     FreeMem(DataBuffer,8000);
     FreeMem(AppCode,8);
  endend;

解决方案 »

  1.   

    function Call_ExpenseCalc(TransKind:integer;MedKind:integer;SysDate:Pchar;UserName:Pchar;BillNo:Pchar;MedCardNo:Pchar;InHosNo:Pchar;AppCode:Pinteger;DataBuffer:Pchar):ingeger;stdcall;external 'ExpenSeCalc.dll';
      

  2.   

    没看出啥区别啊  就是少了 stdcall;far; 
    这俩我去掉过 去掉了 就开始报我那 动态库的 错了
      

  3.   

    D7 中 tools-> debugger options ->language exceptions 将stop on delphi exceptions 的对勾去掉 试试 呵呵