用Delphi调用Delphi编译的DLL!
  调用没任何错误,就是退出时
  报异常:
  A call to an OS function failed。
 请问高手们,这是怎么回事,我被折麽三天了。

解决方案 »

  1.   

    再描述1下:
    调用部分(主要代码)
    uses
     sharemem //..procedure PrintPreviewBills(iPJDst,iPJDST1: TDataSet;iPMDat: string; iPrnCt: integer; iOthVs: TStringList; IsPrvw: boolean); stdcall;
      external 'DEMODLL.dll' name 'PrintPreviewBills';implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
      PrintPreviewBills(ADOQuery1,ADOQuery2,'D:\单据.dat',1,nil,True)
    end;以上程序能正确调用DLL,但退出时会报A call to an OS function failed错误.(DLL接口部分主要代码,篇幅有限,类结构复杂,就不贴了)
    library DEMODLLprocedure PrintPreviewBills(iPJDst, iPJDST1: TDataSet; iPMDat: string;
     iPrnCt: integer; iOthVs: TStringList; IsPrvw: boolean); stdcall;
    var
      PJDYJKDX: TPJDYJK_Cls;
    begin
      if iPJDst=nil then
        Exit;
      if iPJDst.IsEmpty then
        Exit;
      if iPJDst.Eof then           
        Exit;
      if not FileExists(iPMDat) then
        Exit;    
      PJDYJKDX := TPJDYJK_Cls.Create;
      try
        with PJDYJKDX do
        begin
          FPJDst := iPJDst;
          FPJDst1 := iPJDST1;
          FPMDat := iPMDat;
          FOthVs := iOthVs;
          FPrnBCt := iPrnCt;
          FBillDX.LoadPJXX_F(FPMDat);
          FIsPrvw := IsPrvw;
          //执行打印或预览
          ExecPJDYPrnPrvw;
        end;
      finally
        PJDYJKDX.Free;
      end;
    end;exports
      PrintPreviewBills;
    end.
      
    end.
      

  2.   

    就算不调用PrintPreviewBills.
    退出时也会报错
    A call to an OS function failed。
      

  3.   

    兄弟,你有没有注意到调用方式的问题:stdcall,还有另外几种如果DLL你是用DELPHI写的就不是这种调用方式了:Register或者缺省。,另外还试其他几种方式。
      

  4.   

    好像将对象作为参数传递给dll里的函数有问题,前天我也讨论一个类似的问题,还没结果,继续关注