Convertendo string para um Objeto ( Só para os Feras )

24/03/2003

0

Olá Pessoal !!!

É o seguinte tenho umas dl´s e dentro delas algumas funções que envolvem objetos e a minha dúvida é a seguinte se tem como eu passar como String e Transforma-la num objeto, como Form etc.... Sendo que está string é o nome de um objeto que já existe apenas quero passar ele para poder usar dentro da dll, já tentei por ponteiro mas não consegui.
Desde já agradeço a todos.

ulisses


Ulissesn

Ulissesn

Responder

Posts

24/03/2003

Anonymous

Só para os feras:

Equinha pocóto;
Mula sem cabeça;
Cuca;

sthan sthan sthan sthan sthan sthan


Responder

24/03/2003

Qmd

de uma olhada na funcao FindComponent()

com ela vc poderia tratar a classe do objeto retornar e fazer um typecast ou algo do tipo...


Showmessage( TCustomEdit( FindComponent(´Edit1´) ).Text );


Responder

24/03/2003

E_gama

Se a DLL foi escrita em Delphi, vc pode passar diretamente objeto que vc quer. Veja um exemplo

Crie uma DLL (DLL.DLL, por exemplo com o código abaixo - OBSERVE A CLAUSULA ´USES´):

uses
  SysUtils,
  Classes,
  Forms;

{$R *.res}

procedure AlteraCaption(Frm: TForm);
begin
  Frm.Caption := ´Esse Caption foi alterado pela DLL´;
end;

exports
  AlteraCaption;

begin
end.


Agora, na unit que vai utilizar a DLL, faça:
implementation

procedure AlteraCaption(Frm: TForm); external ´DLL.DLL´;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  AlteraCaption(Self);
end;



Com vc verá, o ´caption´ do formulário de sua aplicação, será modificado pela DLL.


Responder

24/03/2003

Carlos Filho

essa é bem complexa hein amigo?? mas eu sei como ajudar:

Suponha que você tenha um DLL com duas funções chamadas triplo e dobro que respectivamente triplica e dobra um valor passado como parâmetro. Suponha um Form com 1 Edit, um SpinEdit e um botão comum com o rótulo CHAMAR

No Edit vc deve escrever o nome da função que vc quer chamar (Triplo ou Dobro) e no SpinEdit vc poe o número que quer processar (dobrar ou triplicar)

no clique do botão do formulário voce poe:

procedure TForm1.Button1Click(Sender: TObject);
var
  HInst: THandle;
  FPointer: TFarProc;
  MyFunct: TIntFunction;
begin
  HInst := LoadLibrary (DllName);
  if HInst > 0 then
  try
    FPointer := GetProcAddress (HInst,
      PChar (Edit1.Text));
    if FPointer <> nil then
    begin
      MyFunct := TIntFunction (FPointer);
      SpinEdit1.Value := MyFunct (SpinEdit1.Value);
    end
    else
      ShowMessage (Edit1.Text + ´ Função DLL não encontrada´);
  finally
    FreeLibrary (HInst);
  end
  else
    ShowMessage (DllName + ´ biblioteca não encontrada´);
end;




Lembrando que você deve ter criado uma biblioteca corretamente com as funções Triplo e Dobro (nesse exemplo) definidas e exportadas e que você está fazendo referência no form1 a essas funções.

No código acima, DllName é uma variavel ou constante que pode ser global contendo o caminho completo para o local onde está a sua DLL

O exemplo do código do botão é genérico, já que você já pode usa-lo em seu programa para chamar suas fuinções! :)

Se eu consegui ajuda-lo, não deixe de me avisar OK?


Responder

24/03/2003

Carlos Filho

[quote:d4df726ea0=´Ðerek Wildstar´]essa é bem complexa hein amigo?? mas eu sei como ajudar:

Suponha que você tenha um DLL com duas funções chamadas triplo e dobro que respectivamente triplica e dobra um valor passado como parâmetro. Suponha um Form com 1 Edit, um SpinEdit e um botão comum com o rótulo CHAMAR

No Edit vc deve escrever o nome da função que vc quer chamar (Triplo ou Dobro) e no SpinEdit vc poe o número que quer processar (dobrar ou triplicar)

no clique do botão do formulário voce poe:

procedure TForm1.Button1Click(Sender: TObject);
var
  HInst: THandle;
  FPointer: TFarProc;
  MyFunct: TIntFunction;
begin
  HInst := LoadLibrary (DllName);
  if HInst > 0 then
  try
    FPointer := GetProcAddress (HInst,
      PChar (Edit1.Text));
    if FPointer <> nil then
    begin
      MyFunct := TIntFunction (FPointer);
      SpinEdit1.Value := MyFunct (SpinEdit1.Value);
    end
    else
      ShowMessage (Edit1.Text + ´ Função DLL não encontrada´);
  finally
    FreeLibrary (HInst);
  end
  else
    ShowMessage (DllName + ´ biblioteca não encontrada´);
end;




Lembrando que você deve ter criado uma biblioteca corretamente com as funções Triplo e Dobro (nesse exemplo) definidas e exportadas e que você está fazendo referência no form1 a essas funções.

No código acima, DllName é uma variavel ou constante que pode ser global contendo o caminho completo para o local onde está a sua DLL

O exemplo do código do botão é genérico, já que você já pode usa-lo em seu programa para chamar suas fuinções! :)

Se eu consegui ajuda-lo, não deixe de me avisar OK?[/quote:d4df726ea0]

Esqueci mais um detalhe:
após a seção implementation, nesse exemplo, coloque

type
        TIntFunction = function (I: Integer): Integer; stdcall;



isso define um ponteiro de método que possui um tipo de deginição do ´formato´ de suas funções, que nesse caso específico é: function (I: Integer): Integer;


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar