bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
64 bits - Seus aplicativos no futuro do presente

64 bits - Seus aplicativos no futuro do presente

Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal. 

Veja como comprar e saiba mais sobre o material oferecido,  clicando aqui.

Open v3

 

Costumo oferecer alguns aplicativos em Access pela internet, como o MontaRibbons e tive que superar alguns desafios para fazê-los funcionar nas diversas versões existentes do Windows e do Office.  O mais recente desafio que enfrentei foi o de adaptá-los às versões de 64 bits do Windows 7 e do Office 2010.   A versão de 64 bits do Office 2010 ainda está sendo pouco utilizada no mercado, mas o Windows 7 de 64 bits está se disseminando rapidamente e é por isso que trago neste artigo, as informações necessárias para você preparar os seus projetos, de acordo com as novas adaptações exigidas. 

Windows de 64 bits

O Windows de 64 bits traz um emulador de 32 bits chamado de WOW64 (Windows 32 ON Windows 64), permitindo que qualquer aplicação de 32 bits seja executada, sem problemas.  Para isso, são criados: estrutura de pastas, variáveis de ambientes e registros do Windows independentes.   Observe a tabela abaixo:

Descrição 32 bits (x86) 64 bits (x64)
Pastas do Windows \Windows\sysWoW64 \Windows\System32
  \Program Files (x86) \Program Files
Variáveis de ambientes CommonProgramFiles(x86) CommonProgramFiles
  ProgramFiles(x86) ProgramFiles
Registros do Windows HKEY_LOCAL_MACHINE\Software\ WoW6432Node HKEY_LOCAL_MACHINE\Software

 

 

Devemos ter especial atenção ao nosso código, quando for necessário ter que apontar para algum arquivo numa dessas pastas ou registros do Windows.  Para você compreender melhor, suponha que eu precise criar uma função que indique se o programa compactador WinRar está ou não instalado.

O arquivo Winrar, se for encontrado,  estará na pasta Program Files (86), por se tratar ainda de um programa de 32 bits, mas se futuramente for lançado o Winrar de 64 bits, poderá ser localizado na pasta Program Files.  Tenho que prever esta possível mudança na minha função.  

Usando a janela imediata do VBA , verifico os seguintes resultados:

? dir("c:\program files\winrar\winrar.exe")
Retornou vazio
? dir("c:\program files (x86)\winrar\winrar.exe)
retornou winrar.exe

A pasta pode não estar na unidade c:\ e o que farei neste caso é utilizar a função Environ(), que retornará com o caminho , incluindo a unidade(c,d ,e ...).  Observe os resultados de retorno para o Windows de 64 bits e para o de 32 :

? environ("programfiles")
'No Windows de 64 bits
retornou c:/program files 86 com o Access(2007/2010) de 32 bits
retornou c:/program files com o Access 2010 de 64 bits
'No Windows de 32 bits
retornou c:/program files no Access(2007/2010) de 32 bits

Para verificar a pasta Program files 86 no Access de 64 bits, preciso indicá-la na função environ().

? environ("programfiles(x86)")
'Windows de 64 com Access 2010 de 64
retornou c:\program files 86

Depois de vários testes consigo então elaborar a função que atende a todas as versões do Windows, Office e Winrar.   Observe os comentários :

Faça o login aqui para ter acesso ao código.

Uma outro exemplo:  imagine que eu precise localizar a rota em que o Access está instalado.  É de costume capturarmos esta informação através do registro do Windows.    Sabendo que o Windows de 64 bits armazena as informações dos programas de 32 bits na pasta wow6432node, terei que prever no código, as duas rotas possíveis para o Access (32 bits ou 64). 

Observe os comentários no código abaixo:

Faça o login aqui para ter acesso ao código.

Constantes VBA7, WIN64 e a condicional de compilação (#IF)

O VBA nos permite executar determinado conjunto de códigos, em função da versão utilizada, através de estrutura condicional de compilação(#IF).  A constante VBA7 nos permite identificar se está sendo usada a versão 7 do VBA, que pertence ao Access 2010 e a constante Win64 identifica se o Access 2010 é de 64 bits. 

Veja a estrutura abaixo e os comentários.

Faça o login aqui para ter acesso ao código.

Como exemplo , acompanhe a função abaixo que automatiza a busca de localização da rota do Access 2007 ou a do Access 2010.

Faça o login aqui para ter acesso ao código.

Mudanças nas APIs

Todas as APIs utilizadas com o Office 2010 sofreram alterações na sua estrutura para atender a versão de 64 bits.  Foram acrescentados o atributo PtrSafe, na instrução declare e os novos tipos de dados LongLong e LongPtr.

Para o office 2010 de 32 bits a API funciona sem precisar realizar qualquer alteração, porém a Microsoft recomenda que se use com o atributo Ptrsafe:

Declare ptrsafe Function GetActiveWindow Lib "user32" () As Long

Para atender a versão de 64 bits é preciso alterar o tipo long para longPtr que também é aceito no Access 2010 de 32 bits:

Declare ptrsafe Function GetActiveWindow Lib "user32" () As LongPtr

Para adaptar o aplicativo à nova estrutura das APIs, fazemos uso da condicional de compilação #if

Faça o login aqui para ter acesso ao código.

Tem APIs projetadas para rodar apenas na versão de 64 bits do Access 2010.   Acompanhe a alteração na estrutura da condicional de compilação para atender as APIs de 64 bits.

Faça o login aqui para ter acesso ao código.

A Microsoft disponibilizou um arquivo txt, contendo uma lista de centenas de APIs modificadas.  Se não encontrar na lista, procure pelo Google.  Baixe aqui o arquivo txt.

Arquivos MDE/ADE/ACCDE

Os Bancos de Dados que tiveram seus códigos fonte removidos (como arquivos .mde, .ade e .accde) não podem ser movidos entre as edições de 32 bits e 64 do Access 2010.

Controles ActiveX e complementos COM

Os controles ActiveX e DLLs de suplementos (COM) que foram escritos para a versão de 32 bits do Office não funcionam no de 64 bits..

Segue alguns Links para você se aprofundar

Bom estudo!


 

 


20 comentários

Avelino Sampaio   25/09/2022 16:14:39

Daniel,

em um módulo global.

Sucesso!

Daniel Webster   05/05/2022 08:10:08

Avelino,

Onde no código coloco as instruções das APIs?

JESUS VICENTE   04/03/2022 05:02:33

gostaria de saber se é possível acessar no mesmo aplicativo as duas versões 32 ou 64 - tenho feito alguns teste e não consigo, isto é possível???

JESUS VICENTE   12/02/2022 13:30:40

gostaria de saber se é possível acessar no mesmo aplicativo as duas versões 32 ou 64 - tenho feito alguns teste e não consigo, isto é possível???

Ronaldo Costa   09/02/2022 08:14:49

Olá Avelino!

Fiz as alterações no meu sistema e ele executou normalmente. Porém, faço uso do formulário "frmCaminhoBe" do aplicativo 'Maestro' e ao executar o sistema e abrir o frmCaminhoBe (pelo fato do front-end não encontrar o Back-end), ao clicar no botão 'Procurar' este botão perdeu a ação, era abrir o windows explore para apontar o Back-end. Como posso resolver isso?

Sanckler Guelfi   06/11/2021 00:15:51

Instalando o Office 2010 64 bits.....se desenvolver aplicativos, ele irá rodar em 32 bits???

Adriano   03/11/2021 15:33:31

Obrigado pelo retorno Avelino. Infelizmente, o cliente utiliza o office 64 bits. Vou criar outra forma de exibir os resultados que não seja usando treeview.

abs

Avelino Sampaio   01/11/2021 10:49:14

Adriano,

este OCX não funciona na versão de 64 bits.

Lembrando que vc instalar o Office de 32 bits no Windows de 64 bits.

Sucesso!

Adriano   31/10/2021 20:18:39

Boa Noite Avelino, td bem?

Excelente matéria. Estou com uma dificuldade gigante por causa do 64 bits, estou tentando usar a Treeview que deveria estar na biblioteca "mscomct2.ocx", porém, já fiz o registro e nada, não aparecem os controles activex para usar. Além da treeview, também não consigo encontrar o activex do calendário.

Vc consegue me ajudar?

Desde já, muito obrigado.

abs,

Isabel Cristina Santana   17/07/2021 21:12:36

Avelino... muito obrigada pelo artigo.. lendo-o consegui resolver um problema que muitos da área não conseguiram, nele descobri que são duas pastas a system32 e a syswow64, nesta segunda que estava o executável que precisava para que eu vinculasse o MSINET.OCX, só assim alguns programas da Receita Federal funcionou no meu pc que é 64bits e windows 7. Abraços.

David Vieira Rocha   20/06/2021 16:39:06

Muito grato por ter respondido a solicitação. Como sou novo no ramo ainda estou tendo muitas dificuldades com a linguagem de VBA e Dll's. De qualquer forma vou lhe incomodar bastante...
Antecipo os agradecimentos pela ajuda.

JEFERSSON   25/05/2021 11:38:03

Era isso que eu temia, rsrsrsrsr
Então fuçando na net encontrei alguma coisa sobre essa dll vou tentar adaptar, e depois posto aqui o resultado, por enquanto agradeço o retorno e a dica.


Avelino Sampaio   25/05/2021 06:26:16

Google Agenda,

Acho que a chance de funcionar com o MSINET.OCX são remotas. Vc tem este arquivo ? Ele esta registrado na Pasta c:\windows\syswow64 ?

Tente adaptar o seu projeto, utilizando a DLL msxml.dll

veja no link abaixo o uso desta DLL.

http://comunidade.itlab.com.br/eve/forums?a=search&reqWords=MSXML2.XMLHTTP

Bom estudo!


GOOGLE AGENDA   24/05/2021 10:47:53

AVELINO ESTOU COM UM PROBLEMA, USO O ACCESS 2010, E CONSEGUI UM EXEMPLO DE COMO ASSOCIAR VIA VBA O ACCESS COM AS API'S DO GOOGLE, ATRAVES DO INET(MSINET.OCX), O PROBLEMA É QUE USO JUSTAMENTE O 64BITS, E SEMPRE DA UM ERRO DE QUE NAO FOI POSSIVEL CRIAR O OBJETO, NO ENTANTO CONSEGUI UM OUTRO EXEMPLO FEITO EM VISUAL BASIC, QUE USA A MESMA OCX NA MESMA PASTA E FUNCIONA NORMALMENTE, NA VERDADE USA O MESMO CÓDIGO, SÓ QUE NO ACCES NÃO FUNCIONA, TEM ALGUMA IDEIA DE COMO FAZER ISSO FUNCIONAR, ABAIXO SEGUE O LINK DO EXEMPLO
https://dl.dropbox.com/u/66900159/EventosGoogle.mdb

Marcio   25/03/2021 17:42:53

Boa tarde,

Fiz uma macro, onde tem vários "For" encadeados para varrer uma variável do tipo Type e fazer comparações, onde também existem chamadas para funções. Carregando uma variável de saída, também do tipo Type.
Meu problema é que dependendo da quantidade dos dados que carregados nas variáveis (o tamanho dos vetores são suficientes) a saída fica diferente, mas pela lógica, não deveria, já que os dados ainda seriam os mesmos, apenas acrecidos de mais dados. Parecendo que o Excel está descartando parte dos dados por conta própria.
Isso está acontecendo o W7 e com Office 2007 e 2010.

Obrigado pela ajuda

Avelino Sampaio   02/01/2021 08:35:59

Marcos,

se estiver usando APIs deverá adaptá-las conforme explicado no artigo.

Se tiver usando algum ActiveX, deverá procurar uma outra alternativa pois a maioria dos ActivesX de 32 não funcionam na versão de 64.

Entre no VBA , vá no menu DEPURAR e clique em COMPILAR. Corrija os erros que encontrar

Marcos   28/12/2020 18:16:09

Avelino, montei um banco bem forte e estava rodando tranquilo no 2007, 32bits mas não roda no 2010 64bits, poderia ajudar ?
marcosviniciusenator@gmail.com

Silvio   17/10/2020 17:40:21

PO legal Avelino, que bom saber o que nos espera antes mesmo que usemos o Access 2010.
Muita dor de cabeça será poupada e muitas horas sem dormir. Rsrsrsrsr
Valeu mesmo

MARCIO MELO - RJ   01/10/2020 19:42:36

Ótima matéria e serve de alerta, pena que controles ActiveX e DLLs de suplementos (COM) não funcionaram, por exemplo será que vai existir alguma substituição para a MSCOMM32.OCX (activex control) nos permite a conecção na porta COM que nos tempos de hoje também já estão ficando obsoletas, mas existem para efeito de conhecimentos balanças que utilizam desta saída para se comunicar com a CPU, estudos e novos conceitos devem ser bem análisados... o futuro 64 bits já chegou... forte abraço mestre Avelino.

Sou mais Brasil!

APARECIDO DE ASSIS MACEDO   17/07/2020 13:33:24

Tenho um sistema de Backup que uso essa forma de buscar o executável do WinRar, só que me deparei com a seguinte situação com um cliente: quando o usuário instala o WinRar de 64 bit (versão Nova) no Windows 64, ele é instalado na pasta C:\Program Files que é a padrão do 64 bits, mas se o usuario instalar a versão do WinRar de 32 bits no Windows 64, ele vai para a pasta "C:\Program Files (x86)", Gerando a mensagem que o WinRar não existe no computador, alguem poderia dar alguma idéia de como resolver isso.


Envie seu comentário: