vantagens e desvantagens da DLL...

Delphi

16/09/2004

Olá pessoal!

Gostaria de saber, quais as vantagens de desvantagens de se carregar uma DLL de forma dinâmica? E quais as vantagens e desvantagens de se carregar uma DLL de forma estática?

Aproveitando o ensejo, alguém poderia me dizer pq essa dll apresenta este de erro de violação de endereço em memória.
Access violation at address 01E20B5B in module ´exdll.dll´. Read of address 74000008.


O código da DLL segue abaixo:
library exdll;

uses
  SysUtils,
  Classes,
  DB,
  IB,
  IBSQL,
  IBStoredProc,
  IBDataBase,
  IBCustomDataSet,
  DBTables,
  DBCtrls,
  Forms,
  ToolEdit,
  CurrEdit,
  Dialogs,
  Windows,
  Controls,
  StdCtrls;

{$R *.res}

procedure opensp(SP:TIBStoredProc; Frm:TForm);stdcall; export;
var
i:integer;
Source: TComponent;
begin
  for i:=0 to SP.FieldDefs.Count-1 do
    begin
      Source:=Frm.FindComponent(SP.FieldDefs.Items[i].Name);
      if source <> nil then
       begin
         if source is TEdit then
          TEdit(source).Text:=SP.FieldByName(Sp.FieldDefs.Items[i].Name).AsString;
       end;
     end;
     Sp.Prepare;
     SP.ExecProc;
end;

exports
opensp;
begin
end.



Esta sendo chamada assim:

procedure TForm1.Button3Click(Sender: TObject);
type
Topensp = procedure(SP:TIBStoredProc; Frm:TForm);
var
dllok: THandle;
opensp: Topensp;
begin
{Carregar DLL}
 dllok:=LoadLibrary(´exdll.dll´);
 if dllok = 0 then begin
  MessageDlg(´Não foi possível carregar a DLL ´,MtError, [mbOK],0);
  Exit;
 end;
{Obter o endereço do procedimento}
 @opensp:=GetProcAddress(dllok, ´opensp´);
 if @opensp <> nil then
 {Chamar o procediemtno}
 opensp(Dm1.IBSP2, Form1)
 else
 MessageDlg(´Não foi possível encontrar o procedimento!!´, mtError, [mbOK],0);
{Descarregar DLL}
FreeLibrary(dllok);
end;


Espero q alguém possa me ajudar.

Obrigado a todos....


Martins

Martins

Curtidas 0

Respostas

Marcosalex

Marcosalex

16/09/2004

Vantagens:
- executavel menor e mais leve
- a dll só é carregada no momento em que for utilizada. Se a pessoa não precisar utilizar a rotina no momento, ela não vai pra memória.
- se mais de uma aplicaçao utiliza a biblioteca, a dll pode ser carregada somente uma vez, economizando memória.
- na hora de atualizar o programa, voce só precisa trocar o executavel ou entao somente a dll alterada, simplificando a atualizacao. Isso é interessantissimo, principalmente se voce disponibilizar a atualização pela Internet pra alguem baixar.

Desvantagens:
- versões antigas de bibliotecas não tem controle de versao, permitindo que um sistema instale uma versao mais velha por cima de uma nova, atrapalhando o uso ou dando conflito.

Uma outra alternativa são os componentes COM+ ou WebServices, que são uma evolução das dll´s.


GOSTEI 0
POSTAR