是不是你的EXE和DLL都是Static Link的?如果是,请改为Dynamic Link就行了。

解决方案 »

  1.   

    dll文件:uses
      SysUtils,Graphics,
      jpeg,ADODB,DB,ExtCtrls,
      Classes;{$R *.res}
    procedure ShowImage(image:Timage;dataset:Tdataset;field:string);stdcall;
    var tpeg:tadoblobstream;
        tjpe:tjpegimage;
    begin
       if tblobfield(dataset.FieldByName(field)).IsNull=false then
        begin
         tpeg:=tadoblobstream.Create(tblobfield(dataset.FieldByName(field)),bmread );
         tjpe:=Tjpegimage.Create ;
         tjpe.LoadFromStream(tpeg);
         image.Picture.Assign(tjpe);
         tpeg.Free;
         tjpe.Free ;
        end;
    end;
    exports
       ShowImage;
    exe文件:procedure TForm1.SpeedButton1Click(Sender: TObject);
    type TShowImage=Procedure(Image:Timage;dataset:Tdataset;field:string);
    var DllInstance:THandle;
        PFunc:TFarProc;
    begin
       DllInstance:=loadlibrary('Exam.dll');
       if DllInstance=0 then
        begin
         showmessage('can not load dll');
         exit;
        end;
        pFunc:=GetProcaddress(DllInstance,'ShowImage');
        if pFunc<>nil then
          TShowImage(pFunc)(image1,adotable1,'k38')
        else
         showmessage('can not find the function');
        freelibrary(DllInstance);
    end;end.报错,错在哪儿?
      

  2.   

    type TShowImage=Procedure(Image:Timage;dataset:Tdataset;field:string);
    在上面那行最后加上stdcall,变成:
    type TShowImage=Procedure(Image:Timage;dataset:Tdataset;field:string);stdcall;
    就行了。
      

  3.   

    补充:如果还不行,就把声明
    PFunc: TFarProc;
    改成
    PFunc: TShowImage;
    我一般都用后面这种声明方式。