Fórum Convertendo string para um Objeto ( Só para os Feras ) #149265
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
Curtir tópico
+ 0Posts
24/03/2003
Anonymous
Equinha pocóto;
Mula sem cabeça;
Cuca;
sthan sthan sthan sthan sthan sthan
Gostei + 0
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 );
Gostei + 0
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.
Gostei + 0
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?
Gostei + 0
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;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)