有DLL文件:KLOGIN.DLLVB语句如下:Set AAAKLogin of CreatObject(KLogin.ClsLogin);
然后就可以调用各种函数了:AAAKLogin.函数名但在DELPHI里该如何调用这个DLL并使用其中的函数?用显示调用,我只做到这一步:LibHandle:=LoadLibrary('KLogin'),且LibHandle<>0

解决方案 »

  1.   

    cqpipilu(皮皮鲁)你好:type
      TF1 = function(I: Integer): Integer;//根据函数原型更改一下var
      LibHandle: THandle;
      F1: TF1;
    begin
      LibHandle :=LoadLibrary('KLOGIN.DLL');
      if LibHandle <> 0 then
      begin
        @F1 := GetProcAddress(LibHandle, PChar('FunctionName'));
        if @F1 <> nil then F1();
        FreeLibrary(LibHandle);
      end;
    end;
      

  2.   

    更正一下
    if LibHandle <> 0 then
    begin
      ///  
    end;
    FreeLibrary(LibHandle);
      

  3.   

    谢谢12rain(中雨~沉默的羔羊) 
    我照你的方法做了,编译可以通过,但@t的结果始终是nil,语句如下:
    Type
    TF1 = Procedure;
    .
    .
    var LibHandle:Thandle;
        t:TF1;
    .
    .
    LibHandle:=LoadLibrary('MyFirstLib.dll');
    if LibHandle<>0 then begin
       @t:=GetProcAddress(LibHandle,pchar('MyFirstDLL'));
       if @t<>nil then t
                  else showmessage('Error');
                         end;我的DLL里的过程巨简单,就一个showmessage语句而已;
    上面的语句执行后结果总为Error
      

  4.   

    恕在下愚笨,我只想知道为什么@t<>nil为true如果直接执行t,那么报错:Access violation at address 00000000. Read of address 00000000.
      

  5.   

    上面的代码应该没有问题、请检查一下:Type
    TF1 = Procedure;//这边的定义是否和DLL文件中的一致?@t:=GetProcAddress(LibHandle,pchar('MyFirstDLL'));//名称MyFirstDLL是否和DLL文件中导出的名称(exports F1 name 'F1';)一样?区分大小写PS、你可以捕捉一下异常: if @t<>nil then t else raise Exception.Create(IntToStr(GetLastError));