Recebendo parâmetro de uma DLL sem estar declarada
Olá amigos,
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.
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
Curtidas 0
Respostas
Pezzin
22/12/2006
Sobe.
GOSTEI 0
Massuda
22/12/2006
Não é possível usar uma DLL sem fazer nenhum tipo de referência a ela.
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).
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
Pezzin
22/12/2006
A empresa resposável pela tal dll não diponibilizou nenhuma função dela.
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]
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
Massuda
22/12/2006
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
Pelo seu post inicial, eu havia entendido que seu programa ia usar uma DLL. Mas não é o caso.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
Pezzin
22/12/2006
Cero.
Se usar ParamStr(0) aparece sempre o caminho do sistema....
Então eu posso deixar como defaut sempre ParamStr(1) ?
Obrigado.
Se usar ParamStr(0) aparece sempre o caminho do sistema....
Então eu posso deixar como defaut sempre ParamStr(1) ?
Obrigado.
GOSTEI 0
Massuda
22/12/2006
Se usar ParamStr(0) aparece sempre o caminho do sistema....
É assim mesmo. É o padrão do DOS/Windows: numa linha de comando, o primeiro parâmetro (índice 0) é o nome do programa, qualquer outra coisa aparece depois dele (do índice 1 em diante).GOSTEI 0
Fabiano Góes
22/12/2006
Massuda,
aproveitando o gancho, segue o codigo do artigo citado:
duvida:
essa variavel [b:54d3f28a92]´h´[/b:54d3f28a92] é que tipo de variavel ?
ela não está declarada !!!
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
Massuda
22/12/2006
[quote:ed2c2d0a1b=´Fabiano Góes´]essa variavel [b:ed2c2d0a1b]´h´[/b:ed2c2d0a1b] é que tipo de variavel ?[/quote:ed2c2d0a1b]Integer.
GOSTEI 0
Aloizio Castro
22/12/2006
A empresa resposável pela tal dll não diponibilizou nenhuma função dela.
O que tem o no roteiro deles é o seguinte:
[b:b5803bbf10]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:b5803bbf10]
E aew cara, vc conseguiu resolver este desafio?!?!
GOSTEI 0
Adriano Santos
22/12/2006
Eu vo aproveitar o bonde e fazer umas perguntinhas;
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?
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