急在FORM中动态调用dll后,关闭应用程序后出错的有关问题

急!在FORM中动态调用dll后,关闭应用程序后出错的问题?
dll中的函数调用没有问题,释放dll也没有问题,但是在关闭应用程序后,就弹出错误。
错误信息:Invalid pointer operation,应该是无效指针地址,但是我却一直没有发现错误.谢谢大家了!...
代码如下:
/*****************dll code********************/
library DemoDll;

uses
  ShareMem,
  SysUtils,
  Forms,
  Windows,
  Controls,
  ActnList,
  Dialogs,
  Classes;

{$R *.res}

  function Add( a : Integer; b : Integer ) : Integer; stdcall;
  begin
  Result := a + b;
  end;

  exports  
  Add; 
  begin  
  end. 

/****************** app code*****************/
unit DemoFomr;

interface

uses
  ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
  Button1: TButton;
  procedure Button1Click(Sender: TObject);
  private
  { Private declarations }
  public
  { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}


procedure TForm2.Button1Click(Sender: TObject);
var
  dllHandle : THandle;
  InvokeFunc : function( a : Integer; b : Integer ) : Integer; stdcall;
  a : Integer;
begin
  dllHandle := LoadLibrary( 'E:\TestProject\DemoDelphi\BDEAM\DemoDll\DemoDll.dll' );
  if dllHandle = 0 then
  begin
  ShowMessage( '调用类库失败.' );
  exit;
  end;
  @InvokeFunc := GetProcAddress( dllHandle,PChar( 'Add' ) );
  if @InvokeFunc = nil then
  begin
  ShowMessage( '调用函数失败.' );
  exit;
  end;
  a := InvokeFunc( 5,5 );
  ShowMessage( IntToStr( a ) );
  @InvokeFunc := nil;
  FreeLibrary( dllHandle );
end;

end.

------解决方案--------------------
up
------解决方案--------------------
@InvokeFunc := GetProcAddress( dllHandle,PChar( "Add " ) ); 
这一句会不会有问题??

InvokeFunc : function( a : Integer; b : Integer ) : Integer; stdcall; 
a : Integer; 
变量会不会有冲突???
------解决方案--------------------
看不出有什么问题,调试一下也是正常,不过欠缺考虑一处
if @InvokeFunc = nil then
begin
ShowMessage( '调用函数失败. ' );
FreeLibrary(dllHandle); //需要卸载DLL
exit;
end
end;

------解决方案--------------------
dllHandle := LoadLibrary( "E:\TestProject\DemoDelphi\BDEAM\DemoDll\DemoDll.dll " ); 
    try
if dllHandle = 0 then 
begin 
ShowMessage( "调用类库失败. " ); 
exit; 
end; 
@InvokeFunc := GetProcAddress( dllHandle,PChar( "Add " ) ); 
if @InvokeFunc = nil then 
begin 
ShowMessage( "调用函数失败. " ); 
exit; 
end; 
a := InvokeFunc( 5,5 ); 
ShowMessage( IntToStr( a ) ); 
@InvokeFunc := nil; 
finally
FreeLibrary( dllHandle ); 
end;
------解决方案--------------------