DLL

28/03/2006

Criei uma DLL com várias funções e com um formulário.

Nesse formulário tem o evento OnShow ficando assim

procedure TForm.OnShow(Sender: TObject);
begin
Funcao();
end;

Funcao() é uma função da dll que o form se encontra como faço para executar essa função??


Rudá

Respostas

29/03/2006

Paulocesar1301

Em código rápido, você pode usar a declaração estática de DLL:

...

function [b&93;LoginRede&91;/b&93;: WideString; stdcall; external ´<nome da dll>.dll´;

implementation


Obs.: No final de sua DLL utilize a opção NAME para ´dar nomes aos bois´ na sua dll

Exports
AjAcent NAME ´&91;b&93;AjustaAcento&91;/b&93;´;

begin
end.


No seu projeto, o nome que você declarará é o nome indicado na DLL;


Responder Citar

29/03/2006

Rudá

Acho que não expliquei direito.

Existe um form dentro da DLL que tem um evento OnShow e nesse evento quero que ele execute uma função da propria dll ex:

DLL
procedure CriarForm(); stdcall;
begin
Form1.OnShow:= Showw;
end;

procedure Showw(Sender: TObject); stdcall;
begin
//algo
end;


Então quando o Form1 for dado Show ele execute aquele a função Showw

Ai da erro no [b:853cd07867]Form1.OnShow:= Showw[/b:853cd07867] = [b:853cd07867]Undeclared identifier: ´Showw´[/b:853cd07867]

Pode me ajudar


Responder Citar

29/03/2006

Paulocesar1301

Você tem certeza que ´precisa´ utilizar uma função da dll em um form que está dentro da mesma dll ?
Se sim... nunca usei isso e estou sem delphi aki... tente declarar a função estaticamente dentro da unit do seu form

procedure Showw(Sender: TObject); stdcall; external ´<nome da dll>.dll´;


Mas... acho que esse tipo de recursividade não é usual.


Responder Citar

29/03/2006

Rudá

Eu tenho uma variavel na dll que ira contar quantos form tem abertos.

E como faria isso??

Na dll ele cria o form mas como vou fazer para contar se não tenho como resgatar a variavel para somar quando der show e para diminuir quando der close??


Responder Citar

29/03/2006

Paulocesar1301

Se no caption do seu form você alterar de acordo com o número total fica fácil...

o ideal seria listar as janelas abertas (Tô sem delphi aki e, sinceramente, não tenho o código de cor), salvar em TStrings qualquer e verificar se já existe alguma janela e quantas com seu caption... se sim ele apenas incrementa o caption

Ex.: <seu caption> (1) - estilo office


Responder Citar

29/03/2006

Rudá

Vou tentar fazer isso, muito obrigado!

Poderia tb me tirar outra dúvida de dll?

Quando crio um form na dll assim:

procedure CriarForm(); stdcall;
var
Form: TForm;
begin
Form:= TForm.Create(Application);
Form.Show;
end;


Ele aparece na barra de tarefas aparece um novo aplicativo.

Como faço para tirar da barra??


Responder Citar

30/03/2006

Paulocesar1301

Dá uma olhada:

[url]
http://forum.clubedelphi.net/viewtopic.php?t=72802&highlight=form+dll
[/url]


Responder Citar

30/03/2006

Rudá

Obrigado de novo!

Tenho mais uma dúvida:

Eu crio 3 forms para cima em tempo de execução, ai quando vou fecha o form sempre da erro no terceiro form, mas se eu crio 2 forms não da erro.

Ai pensei que era algo de errado no meu código e então fiz uma nova dll e um novo projeto simples só com o form com uma TImage ai tudo blz, criei 3 forms e fechei todos não deu erro, ai fui criando uns 5 e nada de erro ai criei uns 10 ai deu erro em uns 3 forms.

Eu não consigo entender, acho que pode ser memória algo do tipo pq eu fiz um form simples com uma imagem e pode criar mais form.

No form quando da close ele da em sim mesmo free.

Ai vi que poderia ser isso ai removi o free e não da mais erro! o que pode ser?? eu tenho qie tirar ele da memória!

Da vários tipos de erro como:
[b:677e792aea]Access violation at address 00453356 in module ´projeto.exe´. Read of address 000002F4

Acesse violation at address F28B5653. Read of address F28B5653

Access violation at address 00350A21 in module ´formdll.dll´. Read of address 009E1255 [/b:677e792aea]

Alguem pode me ajudar???


Responder Citar

30/03/2006

Rudá

Pode deixar consegui resolver!

Era só o metodo de como eu limpava ele, estava usando [b:16f5b328fa]Free[/b:16f5b328fa] ai mudei para [b:16f5b328fa]Action:= caFree;[/b:16f5b328fa] e não deu mais erro!

Agora só tenho mais uma dúvida!

Como faço para quando o form da dll abrir ou fechar ou algo do tipo quando acontecer um TNotifyEvent ele fazer algo no meu form do meu aplicativo???

Exemplo quando o botao do form da dll for clicado o meu form do aplicativo az algo como desaparecer ou aparecer???


Responder Citar