Convertendo string para um Objeto ( Só para os Feras )
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
É 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
Curtidas 0
Respostas
Anonymous
24/03/2003
Só para os feras:
Equinha pocóto;
Mula sem cabeça;
Cuca;
sthan sthan sthan sthan sthan sthan
Equinha pocóto;
Mula sem cabeça;
Cuca;
sthan sthan sthan sthan sthan sthan
GOSTEI 0
Qmd
24/03/2003
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 );
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
E_gama
24/03/2003
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´):
Agora, na unit que vai utilizar a DLL, faça:
Com vc verá, o ´caption´ do formulário de sua aplicação, será modificado pela DLL.
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
Carlos Filho
24/03/2003
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:
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?
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
Carlos Filho
24/03/2003
[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:
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
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;
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