Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2474 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

segue acerto, para analise, em libeay32.pas, segundo diretiva IFEND directive (Delphi), conforme abaixo descrito.
"When hiding $IF inside $IFDEF/$ENDIF, do not use $ELSE with the $IF. Previous version compilers will interpret the $ELSE as part of the $IFDEF, producing a compiler error. You can use an {$ELSEIF True} as a substitute for {$ELSE} in this situation, since the $ELSEIF won't be taken if the $IF is taken first, and the older compilers will not interpret the $ELSEIF."

troquei tambem as terminações da diretiva ifdef pois não estava a compilar nas versoes delphi mais antigas (mesmo mais antiga)

por favor testem em versoes novas pois a minha é antiga (a tal mais antiga), só para informar que estou a usar delphi2006

libeay32.pas

Editado por 3Soft Sistemas
informar versao delphi
Postado

Que versão do delphi vc usa ? Pois o ACBr só da suporte do D7...XE9

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

  • Moderadores
Postado

Estas alterações que você enviou na verdade eram a primeira versão do arquivo, muita gente reclamou que não compilava, dai acertamos, vou ter que montar uma VM com várias versões do delphi para testar antes de liberar outra versão, para não ficarmos refazendo.

Equipe ACBr

Régys Borges da Silveira

http://www.regys.com.br

certificacao delphicertificacao delphi
Postado (editado)

ja comparaste a correção que enviei com a versao 9911?

eu alterei todas as terminações endif só para manter o código segundos as diretivas, contudo creio que para reslover o problema de compilação basta resolver os pontos relacionados com o else, esse é onde o compilador barra realmente, conforme podes constatar comparando as 2 versoes.

compilei com essa versao alterada e funcionou bem na minha versao.

libeay32.pas

Editado por 3Soft Sistemas
Postado (editado)

Enviei o acerto para o repositório, peço que testem nas várias versões do delphi para termos certeza que está tudo 100%.

Régis, boa tarde.

Parceiro continuo tentando copilar o acbr e esta dando erro justamente no libeay32.pas já colei as dll's openssl para todas as pastas necessárias mas mesmo assim não tenho exito. Você poderia me orientar!? para constar uso o delphi 2010.

Editado por Breno007
Postado

Enviei o acerto para o repositório, peço que testem nas várias versões do delphi para termos certeza que está tudo 100%.

Régys estou usando o delphi XE7 e esta ocorrendo o mesmo erro, por exemplo o demo ECFTeste1 copila , mas na hora que executa a função :

hLibeayDLL := GetModuleHandle(LIBEAY_DLL_NAME); na linha 1318, retorna "0" e é executado a exceção programada, utilizo o acbr com o delphi xe8 no windows 7 64 bits.

Postado

Enviei o acerto para o repositório, peço que testem nas várias versões do delphi para termos certeza que está tudo 100%.

Régys estou usando o delphi XE7 e esta ocorrendo o mesmo erro, por exemplo o demo ECFTeste1 copila , mas na hora que executa a função :

hLibeayDLL := GetModuleHandle(LIBEAY_DLL_NAME); na linha 1318, retorna "0" e é executado a exceção programada, utilizo o acbr com o delphi xe8 no windows 7 64 bits.

Postado (editado)

Enviei o acerto para o repositório, peço que testem nas várias versões do delphi para termos certeza que está tudo 100%.

Régys estou usando o delphi XE7 e esta ocorrendo o mesmo erro, por exemplo o demo ECFTeste1 copila , mas na hora que executa a função :

hLibeayDLL := GetModuleHandle(LIBEAY_DLL_NAME); na linha 1318, retorna "0" e é executado a exceção programada, utilizo o acbr com o delphi xe8 no windows 7 64 bits.

Tente colocar os arquivos libeay32.dll, ssleay32.ddl no mesmo diretório do executável e tente novamente.

Se ainda tiver com o erro baixe o arquivo dependency walker ( http://www.dependencywalker.com/ ) e verifique cada uma das dlls se não falta alguma dependencia.

Apesar de não ser muito óbvio, uma dll pode carregar outras dlls as quais ela pode depender que exista na maquina, visível pelo path de execução,e ainda, no escopo de acesso do usuário que esta executando o aplicativo / dll.

E pior, é importante que as dependencias sejam de versões compatíveis pois senão qualquer problema de versionamento pode quebrar a assinatura de métodos ou mesmo a funcionalidade esperada. Por exemplo, a versão 1.0.2d (1.0.2.4) do OpenSSL (libeay32 e ssleay32) depende da msvcr120.dll (12.0.21005.1) que não necessariamente vem no windows.

Editado por Valdecir Luciano Carvalho
Postado (editado)

Uso o DELPHI XE8 e deu o mesmo problema de não encontrar a dll, após tentar colocar a dll junto com o exe e na syswow64 e nao funcionar, testei com o TRUNK1 e compilou, então peguei o libeay32.pas do TRUNK1 e coloquei no TRUNK2, ai funcionou :eek:, não deu mais o erro de não encontrar a dll.

Editado por Daniel Carus

Daniel Carus

 

 

Postado (editado)

Enviei o acerto para o repositório, peço que testem nas várias versões do delphi para termos certeza que está tudo 100%.

Régys estou usando o delphi XE7 e esta ocorrendo o mesmo erro, por exemplo o demo ECFTeste1 copila , mas na hora que executa a função :

hLibeayDLL := GetModuleHandle(LIBEAY_DLL_NAME); na linha 1318, retorna "0" e é executado a exceção programada, utilizo o acbr com o delphi xe8 no windows 7 64 bits.

Tente colocar os arquivos libeay32.dll, ssleay32.ddl no mesmo diretório do executável e tente novamente.

Se ainda tiver com o erro baixe o arquivo dependency walker ( http://www.dependencywalker.com/ ) e verifique cada uma das dlls se não falta alguma dependencia.

Apesar de não ser muito óbvio, uma dll pode carregar outras dlls as quais ela pode depender que exista na maquina, visível pelo path de execução,e ainda, no escopo de acesso do usuário que esta executando o aplicativo / dll.

E pior, é importante que as dependencias sejam de versões compatíveis pois senão qualquer problema de versionamento pode quebrar a assinatura de métodos ou mesmo a funcionalidade esperada. Por exemplo, a versão 1.0.2d (1.0.2.4) do OpenSSL (libeay32 e ssleay32) depende da msvcr120.dll (12.0.21005.1) que não necessariamente vem no windows.

 

Uso o DELPHI XE8 e deu o mesmo problema de não encontrar a dll, após tentar colocar a dll junto com o exe e na syswow64 e nao funcionar, testei com o TRUNK1 e compilou, então peguei o libeay32.pas do TRUNK1 e coloquei no TRUNK2, ai funcionou :eek:, não deu mais o erro de não encontrar a dll.

 

Experimentem fazer essa pequena modificação no código e vejam se resolve o problema:

 

procedure OpenSSL_add_all_algorithms;
var
  hLibeayDLL: THandle;
  Add_all_algorithms_procedure: TOpenSSL_InitFunction;
  LibPointer : Pointer;
  {$IFNDEF FPC}sTmp :string;{$ENDIF}
begin
{$IFDEF FPC}
 hLibeayDLL := dynlibs.LoadLibrary(LIBEAY_DLL_NAME) ;
{$ELSE}
 sTmp := String(SSLeay_version( 0 ));
 hLibeayDLL := GetModuleHandle(LIBEAY_DLL_NAME);
{$ENDIF}
....

 

 

Editado por Valdecir Luciano Carvalho
Correção de texto duplicado.
Postado

Valdecir, peguei a unit do svn e alterei para o solicitado e funcionou! 

Se eu remover a linha

sTmp := String(SSLeay_version( 0 ));
 o erro ocorre;

 

Então no meu caso ta resolvido, parabéns.

 

Daniel Carus

 

 

Postado

Esse libeay ta doido, acabei de atualizar , e veio com algumas "sujeiras no codigo"

 

uses
  {$IFDEF FPC} dynlibs, {$ELSE} Windows, {$ENDIF} SysUtils;

const
  {$IFDEF MSWINDOWS}
    LIBEAY_DLL_NAME = 'libeay32.dll';
//<<<<<<< .mine   <-------------------- tive que remover
    {$IFNDEF FPC}{$IF CompilerVersion >= 21}{$DEFINE USE_DELAYED}{$IFEND}{$ENDIF}
//=======   <-------------------- tive que remover
  {$IFNDEF FPC}{$IF CompilerVersion >= 21}{$DEFINE USE_DELAYED}{$IFEND}{$ENDIF}
//>>>>>>> .r9926  <-------------------- tive que remover
  {$ELSE}
    LIBEAY_DLL_NAME = 'libcrypto';
  {$ENDIF}

Postado (editado)

Valdecir, peguei a unit do svn e alterei para o solicitado e funcionou! 

Se eu remover a linha

sTmp := String(SSLeay_version( 0 ));
 o erro ocorre;

 

Então no meu caso ta resolvido, parabéns.

 

 

Então, o problema era que a utilidade do GetModuleHandle é de retornar o handle da dll supostamente ja em memoria pela referencia estática das externals.

No entanto, com o "delayed" a carga não aconteceu ainda no momento da chamada desse procedimento pq não existiu até o momento nenhuma chamada que fizesse a aplicação carrega-la (por demanda). O que fiz ali foi só garantir que existe pelo menos uma chamada simples de uma função da dll pra assegurar que existe o carregamento da antes de tentar pegar o handle.

Esse libeay ta doido, acabei de atualizar , e veio com algumas "sujeiras no codigo"

 

uses
  {$IFDEF FPC} dynlibs, {$ELSE} Windows, {$ENDIF} SysUtils;

const
  {$IFDEF MSWINDOWS}
    LIBEAY_DLL_NAME = 'libeay32.dll';
//<<<<<<< .mine   <-------------------- tive que remover
    {$IFNDEF FPC}{$IF CompilerVersion >= 21}{$DEFINE USE_DELAYED}{$IFEND}{$ENDIF}
//=======   <-------------------- tive que remover
  {$IFNDEF FPC}{$IF CompilerVersion >= 21}{$DEFINE USE_DELAYED}{$IFEND}{$ENDIF}
//>>>>>>> .r9926  <-------------------- tive que remover
  {$ELSE}
    LIBEAY_DLL_NAME = 'libcrypto';
  {$ENDIF}

Não esta doido, isso ai é um resultado esperado de uma resolução de conflito no svn.

Sugiro vc fazer um svn "revert" desse arquivo, assim vc vai ter ele limpo como esta no servidor. Aí só depois vc aplica suas edições se achar necessário.

Editado por Valdecir Luciano Carvalho
merge de posts.
Postado

Pessoal no arquivo libeay32.pas da linha 1291 a linha 1297 tem a declaração de uma constante:

 

const
  {$IFDEF MSWINDOWS}
    LIBEAY_DLL_NAME = 'libeay32.dll';
 // {$IFNDEF FPC}{$IF CompilerVersion >= 21}{$DEFINE USE_DELAYED}{$IFEND}{$ENDIF}
  {$ELSE}
    LIBEAY_DLL_NAME = 'libcrypto';
  {$ENDIF}

exatamente a parte em negrito ai comentei, ai funcionou perfeitamente, quais problemas posso ter ao comentar essa linha de código ? alguém pode me dizer por favor....

 

  • Este tópico foi criado há 2474 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.