GARANTIR DESCONTO

Fórum Problema com descarregamento de DLL #570339

03/11/2016

0

Bom dia

Estou com um projeto que é composto por um aplicativo e uma dll, ambos utilizam a mesma unit de conexão.

Ao tentar fazer o carregamento(load) da dll e executar funciona normalmente (tirando que notei que a variável global da unit de conexão já está preenchida, mesmo assim crio uma nova instância). Mas na hora de fazer o descarregamento (unload) o aplicativo fica em 100% de processamento e da stack overflow.

Eu queria saber se uma dll feita em delphi pode ter as mesma units dos projeto exe que vai chamá-la ou se alguém sabe como corrigir esse problema.

desde já agradeço

obs: a dll tem um form sendo aberto e fechado em seguida, mas em outras dll que tinha feito que não utilizavam a mesma unit não trava).
Thales Oliveira

Thales Oliveira

Responder

Posts

03/11/2016

Joao Ishiwatari

Eu criei algumas dlls em Delphi 7, com forms, sem forms, e passei por alguns transtornos, mas no final sempre funcionaram bem.
Existem alguns aspectos que você deve observar com relação a dlls no delphi.

Antigamente era necessário adicionar na clausula uses da dll o sharemem da Borland.

as variáveis de retorno e os métodos de invocação das dlls também influenciam. e podem gerar problemas dependendo do que você está fazendo.

Sugiro que de uma pesquisada na internet, tem vários artigos que ajudam a resolver problemas com dlls no delphi.
Responder

Gostei + 0

03/11/2016

Thales Oliveira

Bom dia obrigado por responder.

Na dll já está informado o ShareMem.
Os parâmetros eu já testei em String e pchar:
function Executar(appHandle : THandle; conexao, parametro: String):String;
e
function Executar(appHandle : THandle; conexao, parametro: Pchar): Pchar;

Eu tentei achar na internet mas como já tinha outras dlls e elas funcionam fiquei com pé atrás. A variável global não estava preenchida não, é falha do debugador (DXE2). Só da falha no FreeLibrary mesmo, quando debuguei o EXE ví que o stack trace fica inúmeras vezes a chamada da função de desregristro.
Responder

Gostei + 0

03/11/2016

Thales Oliveira

A função que fica stack overflow é: ntdll.KiUserExceptionDispatcher
Responder

Gostei + 0

03/11/2016

Thales Oliveira

Eu acredito que por causa do EXE e da DLL terem a mesma unit com o mesmo objeto / var (data módulo) isso gere problemas ao tentar fazer o unload. Em debug, a variável já esta preenchida e eu já fiz teste de não criar o data módulo e a tela funcionou normalmente, dando o erro somente no unload.

Estou tentando fazer essa prática pois tenho que criar uma maneira de modularizar o sistema que é muito grande e um forte acoplamento.

Se alguém tiver alguma ideia ficarei muito agradecido.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar