vantagens e desvantagens da DLL...
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.
O código da DLL segue abaixo:
Esta sendo chamada assim:
Espero q alguém possa me ajudar.
Obrigado a todos....
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
Curtidas 0
Respostas
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.
- 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