用delphi产生的:project1.dllfunction jia(a,b:integer):integer;stdcall
begin
result:=a+b;
end;
exports
jia;新建一个formvar
 OneHandle : THandle;
begin
  OneHandle := LoadLibrary('e:\project1.dll');
 try
   if OneHandle <> 0 then 
    @jia := GetProcAddress(OneHandle, 'jia');
   if not (@jia = nil) then
    showmessage(inttostr(jia(3,4)));    
finally
   FreeLibrary(OneHandle); 
 end;编译时,提示jia没有定义,怎么回事,谢谢 

解决方案 »

  1.   

    调用
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TVar= function(a,b:integer):integer;stdcall;
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      jia1: TFarProc;
      OneHandle: THandle;
      MyF: TVar;
    begin
      OneHandle:= LoadLibrary('project1.dll');
      try
        if OneHandle<>0 then
          jia1:= GetProcAddress(OneHandle,'jia');
        if jia1<>nil then
        begin
          MyF:= Tvar(jia1);
          showmessage(inttostr(MyF(8,4)));
        end;
      finally
        FreeLibrary(OneHandle);
      end;
    end;end.
      

  2.   

    需要定义jia,不定义怎会认识
      

  3.   

    前面加上
    type
    jia=function(a,b:integer):integer;stdcall;
    然后再去调吧
      

  4.   

    procedure XXX;
    type
      jia=function(a,b:integer):integer;stdcall;var
     OneHandle : THandle;
    begin
      OneHandle := LoadLibrary('e:\project1.dll');
     try
       if OneHandle <> 0 then 
        @jia := GetProcAddress(OneHandle, 'jia');
       if not (@jia = nil) then
        showmessage(inttostr(jia(3,4)));    
    finally
       FreeLibrary(OneHandle); 
     end;