Recebendo parâmetro de uma DLL sem estar declarada

Delphi

22/12/2006

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.


Pezzin

Pezzin

Curtidas 0

Respostas

Pezzin

Pezzin

22/12/2006

Sobe.


GOSTEI 0
Massuda

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).


GOSTEI 0
Pezzin

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]


GOSTEI 0
Massuda

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

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.


GOSTEI 0
Massuda

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

Fabiano Góes

22/12/2006

Massuda,

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

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

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

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?


GOSTEI 0
POSTAR