library Week;uses
  Windows,
  SysUtils,{$R *.res}function TodayWeek(TadayDate : TDatetime):string; stdcall;               
var  Today_week:integer;
begin
   Today_week:=DayofWeek(TadayDate);
   case Today_week of
     1:result:='星期日';
     2:result:='星期一';
     3:result:='星期二';
     4:result:='星期三';
     5:result:='星期四';
     6:result:='星期五';
     7:result:='星期六';
   end;
end;
exports
  TodayWeek index 1 name '';begin
end.以上写的动态连接库以下动态调用Dll
unit UDll;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TfrmDll = class(TForm)
    Week: TButton;
    lbWeek: TLabel;
    procedure WeekClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  frmDll: TfrmDll;implementation{$R *.dfm}
type
  TStrFunc = function (TadayDate : TDatetime):string; stdcall;
var
  Handle: THandle;
  TodayWeek : TStrFunc ;
procedure LoadFuncDll;
begin
  if Handle = 0 then
  begin
    Handle := LoadLibrary('Week.dll');
    if Handle = 0 then
      raise Exception.Create('Week.dll 加载失败');
    try
      @TodayWeek := GetProcAddress(Handle, Pointer(HiWord(0) or LoWord(5)));
      if @TodayWeek = nil then
        raise Exception.Create('Week.dll 中没有输出 TodayWeek 函数');
    except
      FreeLibrary(Handle);
      Handle := 0;
      raise;
    end;
  end;
end;  procedure FreeFuncDll;
begin
  if Handle <> 0 then
  begin
    FreeLibrary(Handle);
    Handle := 0;
    @TodayWeek := nil;
  end;
end;procedure TfrmDll.WeekClick(Sender: TObject);
begin
  if @TodayWeek = nil then LoadFuncDll;
    lbWeek.Caption:=TodayWeek(Date);  //获取到结果了
    FreeFuncDll;  //运行到这就报错了  end;
initializationfinalization
  FreeFuncDll;end.不知道错在哪呢,高手帮帮忙哦!!

解决方案 »

  1.   

    修改一下
    procedure LoadFuncDll;
    begin
      if Handle = 0 then
      begin
        Handle := LoadLibrary('Week.dll');
        if Handle = 0 then
          raise Exception.Create('Week.dll 加载失败');
        try
          @TodayWeek := GetProcAddress(Handle, Pointer(HiWord(0) or LoWord(1)));
          if @TodayWeek = nil then
            raise Exception.Create('Week.dll 中没有输出 TodayWeek 函数');
        except
          FreeLibrary(Handle);
          Handle := 0;
          raise;
        end;
      end;
    end;
      

  2.   

    function TodayWeek(TadayDate : TDatetime):Pchar; stdcall;     //String 改为Pchar