Fórum Recebendo parâmetro de uma DLL sem estar declarada #335099
22/12/2006
0
Existe a possibilidade de meu aplicativo receber um parâmetro (código de barras) sem no meu aplicativo estar declarada ou referenciada a tal dll ?
Obrigado.
Pezzin
Curtir tópico
+ 0Posts
26/12/2006
Pezzin
Gostei + 0
26/12/2006
Massuda
Existem dois tipos de ´vínculos´ entre um programa e uma DLL.
O vínculo estático é o jeito mais fácil de usar uma DLL. Simplemente declare as funções/procedures da DLL no seu programa incluindo um ´external ´tal.dll´´. Dessa forma, a DLL é sempre carregada quando seu programa é iniciado.
No seu caso, parece que o que você precisa é um vínculo dinâmico. Nesse caso, você declara ponteiros para as funções/procedures da DLL no seu programa e você carrega/descarrega a DLL.
:arrow: [url=http://www.delphifaq.com/faq/delphi_windows_API/f347.shtml]Neste artigo[/url] do site DelphiFAQ.com tem um exemplo bem simples. No exemplo, o código tenta carregar a DLL ´MyDLL´ e procura pela função MyProc; o programa declara um ponteiro do tipo TfncCnx que deve corresponder à declaração da função MyProc (no seu caso, teria que ser um ponteiro equivalente à função/procedure que você pretende usar).
Gostei + 0
26/12/2006
Pezzin
O que tem o no roteiro deles é o seguinte:
[b:dea4681bbb]Neste modelo a Vidalink fornece uma DLL já desenvolvida. Essa DLL tem a função de chamar um executável a ser criado pela Software House passando como parâmetro para esse executável o código de barras (EAN) digitado a cada produto no Autorizador. Esse executável, ao receber o código, cria um arquivo txt de uma linha relativo ao produto em questão conforme layout abaixo consultando a base de dados da loja.
[/b:dea4681bbb]
Gostei + 0
26/12/2006
Massuda
Pelo que entendi, a DLL irá chamar seu programa passando um parâmetro; provavelmente tem algum lugar que configura o nome do programa que a DLL irá chamar.
Para pegar o código no seu programa, use as funções ParamStr() e ParamCount().
Gostei + 0
26/12/2006
Pezzin
Se usar ParamStr(0) aparece sempre o caminho do sistema....
Então eu posso deixar como defaut sempre ParamStr(1) ?
Obrigado.
Gostei + 0
26/12/2006
Massuda
Gostei + 0
26/12/2006
Fabiano Góes
aproveitando o gancho, segue o codigo do artigo citado:
type
TfncCnx = function (s : string) : THandle;
var
cnx : TfncCnx;
begin
{ load the DLL and get the function´s address }
h := LoadLibrary(´myDll´);
if h = 0 then
begin
ShowMessage (´DLL not available´);
end
else
begin
@cnx := GetProcAddress(h, ´myProc´);
if @cnx = nil then
begin
{ function not found.. misspelled? }
ShowMessage (´blub´);
end
else
begin
{ call the function as usually }
x := cnx(´alpha´);
end;
{ unload the DLL }
FreeLibrary(h);
end;
end;
duvida:
h := LoadLibrary(´myDll´);
essa variavel [b:54d3f28a92]´h´[/b:54d3f28a92] é que tipo de variavel ?
ela não está declarada !!!
Gostei + 0
27/12/2006
Massuda
Gostei + 0
29/03/2007
Aloizio Castro
E aew cara, vc conseguiu resolver este desafio?!?!
Gostei + 0
31/03/2007
Adriano Santos
A chamada dinâmica da dll significa que será carregada somente no momento em que for usar? Olha só: no meu sistema os layouts de impressão dos meus clientes ficam todos em dll, ou seja, cada cliente tem o seu e então quando o cara manda imprimir algo o aplicativo chama a function na dll e abre um form. Só que do jeito que foi programado a dll precisa obrigatoriamente estar no diretório da aplicação pra poder funcionar, mesmo que ainda não esteja a utilizando. Quero carregá-la só no momento do seu uso.
É assim que eu devo fazer a chamada? Dinamicamente?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)