Erro chamar Form de DLL

191 views
Skip to first unread message

Wilian

unread,
Jun 6, 2012, 1:23:26 PM6/6/12
to dug...@googlegroups.com
Boa tarde!

Estou com um problema ao chamar um formulário de uma DLL no meu sistema. Se eu chamar via showmodal, ele abre a tela, consigo utilizal-la normalmente, porém ao fechar acontece um acess violation após o FreeLibrary.

Chamo o form dessa maneira:

procedure TFMenu.GerarArquivoClick(Sender: TObject);
type
    TShowFormModal = procedure;
const
    lShowFormModal : TShowFormModal = nil;
var
    DLLHandle : THandle;
begin
    DLLHandle := LoadLibrary(PChar(ExtractFilePath(Application.ExeName) + 'F.dll'));
    if DLLHandle <> 0 then
      @lShowFormModal := GetProcAddress(DLLHandle, 'ShowDllFormModal');
    if Assigned(lShowFormModal) then
        lShowFormModal;
    FreeLibrary(DLLHandle);
end;

Na minha dll, tenho:

procedure ShowDllFormModal; stdcall;
begin
    F := TF.Create(nil);
    F.ShowModal;
end;

Exports
    ShowDllFormModal;

E na primeira linha dos uses do projeto da dll coloquei até o ShareMem para ver se adiantava, mas não teve jeito.

library F;

uses
  ShareMem

Alguém pode me ajudar?

Wilian Selzlein




Jefferson Follmann

unread,
Jun 6, 2012, 1:25:46 PM6/6/12
to dug...@googlegroups.com
ShareMem tem que constar como a primeira unit do dpr do projeto que consome a DLL.

Tenta e ve se resolve.

Abraço.

--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR

Twitter: @dugrs
http://www.facebook.com/groups/dugrs/
http://www.Vimeo.com/dugrs



--
Jefferson Luis Follmann
Fone: (51) 9818-1235

  

Wilian

unread,
Jun 6, 2012, 1:40:23 PM6/6/12
to dug...@googlegroups.com
Jefferson,

Obrigado pela resposta. Mas esqueci de mencionar que já tinha feito isso também:

program E;

uses
  ShareMem,


Wilian

-----Mensagem Original-----
De: "Jefferson Follmann" <jeff.f...@gmail.com>
Para: dug...@googlegroups.com
Data: 06/06/2012 14:26
Assunto: [Spam] Re: [dug-rs] Erro chamar Form de DLL

Jefferson Follmann

unread,
Jun 6, 2012, 1:44:51 PM6/6/12
to dug...@googlegroups.com
Até onde eu lembro, stdcal é utilizado para chamadas estáticas da dll.

Tente deixar da seguinte forma:

procedure ShowDllFormModal; export

begin
    F := TF.Create(nil);
    F.ShowModal;
end; 

Exports 
    ShowDllFormModal;

Jefferson Follmann

unread,
Jun 6, 2012, 1:45:08 PM6/6/12
to dug...@googlegroups.com
No seu exemplo, você esta carregando de forma dinâmica a dll.

Wilian

unread,
Jun 6, 2012, 3:36:57 PM6/6/12
to dug...@googlegroups.com
Jefferson

Exato, mudei com o export em vez do stdcall mas deu o mesmo erro!

Wilian


-----Mensagem Original-----
De: "Jefferson Follmann" <jeff.f...@gmail.com>
Para: dug...@googlegroups.com
Data: 06/06/2012 14:45

Wilian Selzlein

unread,
Jun 8, 2012, 7:46:01 PM6/8/12
to dug...@googlegroups.com
Boa noite!

Estava pensando, eu uso na minha aplicação e na dll o mesmo datamodule. Será que pode ser isso que esteja dando conflito?

Será que o Create(nil) também não pode ser? Se trocar por Create(Application)?

Wilian

Caique

unread,
Jun 9, 2012, 2:20:46 PM6/9/12
to dug...@googlegroups.com
Fa�a o FREE do form ....



Caique

Desenvolvimento e suporte a Desenvolvedores
Delphi Win32 - Firebird


+ cai...@turbocode.com.br
( +55 (19) 9325-9571
www.turbocode.com.br
NFe CTe P03

-----Original Message-----
From: Wilian
Sent: Wednesday, June 06, 2012 2:23 PM
To: dug...@googlegroups.com
Subject: [dug-rs] Erro chamar Form de DLL

Boa tarde!

Estou com um problema ao chamar um formul�rio de uma DLL no meu sistema. Se
eu chamar via showmodal, ele abre a tela, consigo utilizal-la normalmente,
por�m ao fechar acontece um acess violation ap�s o FreeLibrary.
E na primeira linha dos uses do projeto da dll coloquei at� o ShareMem para
ver se adiantava, mas n�o teve jeito.

library F;

uses
ShareMem

Algu�m pode me ajudar?

Wilian Selzlein




--
Voc� recebeu esta mensagem porque est� inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade
Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscri��o neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais op��es, visite este grupo em

Wilian Selzlein

unread,
Jun 16, 2012, 7:09:54 AM6/16/12
to dug...@googlegroups.com
Bom dia!

Deixei um tempo sem responder para testar. A princ�pio resolveu sim, as
vezes quando acontece alguma exce��o gera um access violation, mas muito
raramente.

Wilian Selzlein
Reply all
Reply to author
Forward
0 new messages