Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Necessidade:

Foi necessário fazermos algumas alterações nas linhas de códigos do fonte do ACBr para que o Delphi XE5 pudesse compilá-lo em 64 bits. Deste modo é possível que o Delphi XE5 compile em 32 bits e 64 bits.

 

... \Fontes\ACBrCapicom\ACBrHTTPReqResp.pas

Na linha 213:

Antes

 

Depois

{$IFDEF WIN64}lCertContext: integer;{$ENDIF}

Na linha 250:

Antes

CertContext.Get_CertContext(integer(PCertContext));

Depois

    {$IFDEF WIN32}

      CertContext.Get_CertContext(integer(PCertContext));

      {$ELSE}

      lCertContext := integer(PCertContext);

      CertContext.Get_CertContext(lCertContext);

      PCertContext := Pointer(lCertContext);

      {$ENDIF}

 

Na linha 256:

Antes

CertContext.Get_CertContext(integer(PCertContext));

Depois

    {$IFDEF WIN32}

    CertContext.Get_CertContext(integer(PCertContext));

    {$ELSE}

    lCertContext := integer(PCertContext);

    CertContext.Get_CertContext(lCertContext);

    PCertContext := Pointer(lCertContext);

    {$ENDIF}

 

... \Fontes\ACBrCapicom\JwaWinBase.pas

Nas linhas 6165 e 6165:

Antes

begin

Result := PVOID(InterlockedExchange(LONG(Target), LONG(Value)));

Depois

    {$IFDEF WIN64}

var

  lTarget, lValue: integer;

{$ENDIF}

begin

  {$IFDEF WIN64}

  lTarget := LONG(Target);

  lValue  := LONG(Value);

  Result  := PVOID(InterlockedExchange(lTarget, lValue));

  Target  := PVOID(lTarget);

  Value   := PVOID(lValue);

  {$ELSE}

  Result := PVOID(InterlockedExchange(LONG(Target), LONG(Value)));

  {$ENDIF}

 

Nas linhas 6170 e 6171:

Antes

begin

Result := PVOID(InterlockedCompareExchange(LONG(Destination), LONG(Exchange), LONG(Comperand)));

Depois

    {$IFDEF WIN64}

var

  lDestination, lExchange, lComperand: integer;

{$ENDIF}

begin

  {$IFDEF WIN64}

  lDestination := LONG(Destination);

  lExchange    := LONG(Exchange);

  lComperand   := LONG(Comperand);

  Result       := PVOID(InterlockedCompareExchange(lDestination, lExchange, lComperand));

  Destination  := PVOID(lDestination);

  Exchange     := PVOID(lExchange);

  Comperand    := PVOID(lComperand);

  {$ELSE}

  Result := PVOID(InterlockedCompareExchange(LONG(Destination), LONG(Exchange), LONG(Comperand)));

  {$ENDIF}

 

 

... \Fontes\ACBrNFe2\ACBrNFeDANFEFRDM.pas

Nas linhas 245 e 246:

Antes

iDelLen := PCardinal(Cardinal(ADelimiter) - SizeOf(Cardinal))^;

iLen := PCardinal(Cardinal(AString) - SizeOf(Cardinal))^;

Depois

    {$IFDEF WIN32}

      iDelLen := PCardinal(Cardinal(ADelimiter) - SizeOf(Cardinal))^;

      iLen := PCardinal(Cardinal(AString) - SizeOf(Cardinal))^;

    {$ELSE}

      iDelLen := PCardinal(int64(ADelimiter) - SizeOf(Cardinal))^;

      iLen := PCardinal(int64(AString) - SizeOf(Cardinal))^;

    {$ENDIF}

 

Na linha 264:

Antes

for x := 1 to PCardinal(Cardinal(Step^) - SizeOf(Cardinal))^ do

Depois

    {$IFDEF WIN32}

    for x := 1 to PCardinal(Cardinal(Step^) - SizeOf(Cardinal))^ do

     {$ELSE}

     for x := 1 to PCardinal(int64(Step^) - SizeOf(Cardinal))^ do

     {$ENDIF}

Na linha 272:

Antes

Cardinal(Step) := Cardinal(Step) + SizeOf(Cardinal);

Depois

        {$IFDEF WIN32}

      Cardinal(Step) := Cardinal(Step) + SizeOf(Cardinal);

      {$ELSE}

      int64(Step) := int64(Step) + SizeOf(Cardinal);

      {$ENDIF}

ACBrHTTPReqResp.pas

ACBrNFeDANFEFRDM.pas

JwaWinBase.pas

  • Curtir 2
  • 3 meses depois ...
Postado

Obrigada pela atenção @Daniel Simoes e @Juliomar Marchetti.

Eu não baixei as units anexadas, e sim substitui as linhas que apresentavam problema com a sugestão apresentada.

Segue meus fontes. 

Estão com alterações apenas nos trechos citados

ACBrDFeCapicomDelphiSoap.pas

ACBrNFeDANFEFRDM.pas

ACBrCTeDACTEFR.pas

JwaWinBase.pas

ACBrHTTPReqResp.pas

Jeanny Paiva Lopes

Analista de Sistemas / Desenvolvedora 

[email protected]

[email protected]
Tel.: +55 (32) 3539-5700

 

 

  • Fundadores
Postado

Consegue revisar se todos IFDEFs são realmente necessários ?

Exemplo:

  {$IFDEF WIN32}
      CertContext.Get_CertContext(Integer(PCertContext));
  {$ELSE}
      lCertContext := Integer(PCertContext);
      CertContext.Get_CertContext(lCertContext);
      PCertContext := Pointer(lCertContext);
  {$ENDIF}

aparentemente o código de 64bits compilaria também para 32 bits...

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Sim. Foi necessário.

Só encontrei este tópico pois tive erro ao compilar em 64bits, e procurei no fórum se já havia alguma ocorrência.

Atualmente surgiu a necessidade de trabalhar apenas com NFe, CTe no 64bits, podem haver mais ocorrências para demais componentes.

 

O erro que ocorre sem a diretiva:
[DCC Error] ACBrDFeCapicomDelphiSoap.pas(101): E2197 Constant object cannot be passed as var parameter.

*A principio não encontrei alternativa além do uso das diretivas.

Jeanny Paiva Lopes

Analista de Sistemas / Desenvolvedora 

[email protected]

[email protected]
Tel.: +55 (32) 3539-5700

 

 

  • 1 mês depois ...
  • Fundadores
Postado

Apliquei várias modificações para a compilação em 64 bits... já está compilado em Lazarus/FPC 3 64 bits...

Ainda estou analisando as modificações de JwaWinBase.pas

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Em relação a JediWin32API, apliquei as seguintes modificações

Citar

- Remoção de Units não utilizadas
- Atualização de Units usadas com ultima versão do projeto Jedi-SVN (1.17)
- Ajustes para compilação em 64bits

 

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Em relação a Unit ACBrNFeDANFEFRDM.pas

modifiquei as linhas:

iDelLen := PCardinal(Cardinal(ADelimiter) - SizeOf(Cardinal))^;
iLen := PCardinal(Cardinal(AString) - SizeOf(Cardinal))^;

para:

iDelLen := Length(ADelimiter);
iLen := Length(AString);

 

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Este tópico foi criado há 3181 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.