ERRO AO LIBERAR DLL NO WIN XP, PORQUE ?

Delphi

14/10/2005

Eu preciso carregar DLLs em tempo de execução que executam as mesmas funções em todas as DLLs, mas com resultados diferentes, dependendo da DLL que eu carrego com o seguinte código:

type
  TIntFunction = procedure; stdcall;
  TVerFunction = function: PChar; stdcall;

procedure MinhaFuncao;
var
   HInstDLL: Integer;
   FPointerDLL: TFarProc;
   FuncDLLTex: TIntFunction;
   FuncDLLVer: TVerFunction;
begin
      // Carrega DLL
      cNomeDLL := cDirServer+´Exec\DLL\´+cNomeDLL+´.DLL´;
      HInstDLL := LoadLibrary(PChar(cNomeDLL));
      if HInstDLL <> 0 then
      begin
         try
            // Checa versão da DLL 
            FPointerDLL := GetProcAddress( HInstDLL, PChar(´ChecaVer´));
            if FPointerDLL <> nil then
            begin
               FuncDLLVer := TVerFunction( FPointerDLL );
               // Checa versão da DLL e da Tabela
               VerOK := ChecaVersao(FuncDLLVer);
            end;

            if VerOK then
            begin
               FPointerDLL := GetProcAddress( HInstDLL, PChar(´DLLFunc´));
               if FPointerDLL <> nil then
               begin
                  FuncDLLTex := TIntFunction( FPointerDLL );

                  // DLL executa função
                  FuncDLLTex;
               end
               else
                  ShowMessage(´Erro na pesquisa de Função´);
            end
            else
               ShowMessage(´Incompatibilidade de versões´#1310+
                           ´entre dados e texto!´);
         finally
            // Libera DLL
            FuncDLLVer := nil;
            FuncDLLTex := nil;
            FPointerDLL := nil;
            try // checar sistema operacional
               if fmLogon.nCheckOS = 1 then // para Win 98
                  FreeLibrary(HInstDLL);   // dando erro no XP E 2000
            except
               ShowMessage(´Erro na liberação do arquivo AML!´);
            end;
          end;
      end; 
end;


Esta função da DLL cria um formulário com dados para informação ao usuário, que ao ser fechado é destruido. No Win 98 libera a DLL sem nenhum problema, no Win 95, Win XP e Win 2K dá um erro mas o programa não fecha.

Eu gostaria de alguma dica para resolver este problema, pois eu tive que checar qual é o sistema operacional para acabar com o erro.

Obrigado por qualquer dica,

Quadrado

[b:71afc13e55][color=blue:71afc13e55]Tópico bloqueado por Vinicius2K:[/color:71afc13e55][/b:71afc13e55] [list:71afc13e55][b:71afc13e55][color=red:71afc13e55][*:71afc13e55]Título do tópico inteiramente em maiúsculas.[/color:71afc13e55][/b:71afc13e55][/list:u:71afc13e55] Peço que leia atentamente as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] e se algum esclarecimento sobre o funcionamento do fórum ou sobre as Regras de Conduta for necessário, envie-me uma [url=http://forum.clubedelphi.net/privmsg.php?mode=post&u=2796]Mensagem Particular[/url].



Quadrado

Quadrado

Curtidas 0
POSTAR