程序定义如下:使用一个hsc3836.dll文件
function hs_state(state:integer):integer;stdcall;
function del_dbf(dbfno:integer):integer;stdcall;
function down_dbf(filename:pchar;dbfno:integer):integer;stdcall;
function down_prg(filename:pchar):integer;stdcall;
function down_psd(filename:pchar):integer;stdcall;
function up_dbf(filename:pchar;dbfno:integer):integer;stdcall;implementation
function hs_state;external 'hsc3836.dll' name 'hs_state';
function del_dbf;external 'hsc3836.dll' name 'del_dbf';
function down_dbf;external 'hsc3836.dll' name 'down_dbf';
function down_prg;external 'hsc3836.dll' name 'down_prg';
function down_psd;external 'hsc3836.dll' name 'down_psd';
function up_dbf;external 'hsc3836.dll' name 'up_dbf';
程序事件:
procedure Tcbjsl_fm.xz_buttonClick(Sender: TObject);
var
a,state,returnvalue,i:integer;
filename:string;
begin
state:=hs_state(5);//一调用这个就出错,只有在delphi7.0才出错,这说明调用不成功!!!....
end;请问我要使用什么方法才能调用成功?

解决方案 »

  1.   

    function hs_state(state:integer):integer;stdcall; far  external 'hsc3836.dll' ;
    这样写应该没有问题
      

  2.   

    动态调用dll例子:
    procedure FaxToBmp.Execute;
    var TempHandle:THandle;
        DJCvt_Bfx2Bmp:Function(Bfxfilename:Pchar;Bmpfilename:Pchar;PageMode:integer;RotateMode:integer):integer;Stdcall;
    begin        //动态调用
    FreeonTerminate:=true;
    TempHandle:=LoadLibrary(pchar(Path+'DJ_BFX.dll'));
    try
    if TempHandle=0 then
     raise Exception.Create('不能加载DLL');
    @DJCvt_Bfx2Bmp:=GetProcAddress(TempHandle,pchar('DJCvt_Bfx2Bmp'));
    if @DJCvt_Bfx2Bmp<>nil then
    DJCvt_Bfx2Bmp('F:\TempFax.bfx','F:\TempFax.bmp',1,1)
    else
     RaiseLastOSError;if DirectoryExists(path+'Temp')=false then
    CreateDir(path+'Temp');
    DJCvt_Bfx2Bmp(Pchar(Path+'FaxFile\Receive\'
    +FormatDateTime('YYYYmm',FormFaxReceive.DBGrid1.Fields[2].value)+'\'
    +FormFaxReceive.DBGrid1.Fields[0].AsString),Pchar(Path+'Temp\TempFax.bmp'),1,1);
      { Place thread code here }
    finally
    FreeLibrary(TempHandle);
    Synchronize(ShowPreview);
    end;end;