Convertendo string para um Objeto ( Só para os Feras )
24/03/2003
0
É 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
Posts
24/03/2003
Anonymous
Equinha pocóto;
Mula sem cabeça;
Cuca;
sthan sthan sthan sthan sthan sthan
24/03/2003
Qmd
com ela vc poderia tratar a classe do objeto retornar e fazer um typecast ou algo do tipo...
Showmessage( TCustomEdit( FindComponent(´Edit1´) ).Text );
24/03/2003
E_gama
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.
24/03/2003
Carlos Filho
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?
24/03/2003
Carlos Filho
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;
Clique aqui para fazer login e interagir na Comunidade :)