已知dll中有以下函数和过程:
Function MyFunc(Name:String; age:integer):String;  stdcall;
begin
   result:=name + ' is ' + inttostr(age);
end;
Procedure SayHello;  stdcall;
begin
   showmessage( 'hello');
end;Procedure AskYou(Name:String); stdcall;
begin
   showmessage(Name + ',what are you doing ? ' );
end;
-----------------
因为我不会静态调用,请给出以了函数和过程的静态调用方法。
最好是代码命名能规范些。
以上三个都请给出一个调用实例。
谢谢!

解决方案 »

  1.   

    对不起,是动态引用。
    用下面的方式
       Moudle := Loadlibrary('ty.dll');假设文件名是  ty.dll
      

  2.   

    举一个例子吧。  TMyFunc = Function(Name:PChar; age:integer):PChar; stdcall;procedure LoadDll;
    var
      LibHandle :THandle;
      MyFunc:TMyFunc;
    begin  
          LibHandle := LoadLibrary('ty.dll');
          if LibHandle <= 32 then
          begin
            Messagebox(handle,'ty.dll模块装载失败!'),'失败',MB_ICONERROR);
          end
          else
          begin
            @MyFunc := GetProcAddress(LibHandle,'MyFunc');
            if(@MyFunc <> nil) then
            begin
                MyFunc(@Application);
            end
            else
              Messagebox(handle,'该模块的入口函数错误!','失败',MB_ICONERROR);
          end;
    end;
      

  3.   

    TMyFunc = Function(Name:PChar; age:integer):PChar; stdcall;
    这句在implementation前定义
      

  4.   

    首先定义三个方法类型, 即你要调用的dll中的方法
      TMyFunc = function(Name: string; Age: integer):string;
      TSayHello = procedure();
      TAskYou = procedure(Name: string);  然后定义三个方法类型的变量
     MyFunc: TMyFunc;
      SayHello: TSayHello;
      AskYou: TAskYou;  最后就是调用了
      var
       Module: HMODULE;
       TempStr: String;
      begin
        Module := Loadlibrary('ty.dll');
        @MyFunc := GetProcAddress(Module, 'MyFunc');
        @SayHello := GetProcAddress(Module, 'SayHello');
        @AskYou := GetProcAddress(Module, 'AskYou');
        TempStr := MyFunc;
      end;
      

  5.   

    var 
        Name, TempStr: String;
        Age: Integer;
      Begin
        ...
        Name := '123';
        Age := 100;
        TempStr := MyFunc(Name, Age);
      end
      

  6.   

    静态调用有那么严重吗?
    Function MyFunc(Name:String; age:integer):String;  stdcall;external 'DLL的路径';
    在后面就直接可以调用该函数了!
      

  7.   

    我的一个例子,给你参考参考library HKTest;uses
      //ExceptionLog,
      HKProc in 'HKProc.pas';exports
    EnableHotKeyHook,
    DisableHotKeyHook;begin
    hNextHookProc := 0;
    end.