Ouvrir ou imprimer un fichier quelconque à partir de son nom – Access 64 bits

Cet article est une mise à jour de l’article Ouvrir ou imprimer un fichier quelconque à partir de son nom. L’article initial portait sur les versions 32 bits d’Access (et d’Office en général). Cet article concerne uniquement les versions 64 bits d’Access et d’Office.

Ce qui change en 64 bits

Sur un processeur 64 bits, la taille des pointeurs mémoire est par définition 2 fois plus grande que sur un processeur 32 bits. Ceci ne change pas le code VBA classique, mais a bien sûr un impact sur tous les appels de fonctions système (fonctions API fournies par des DLL externes).

En gros, si vous disposez d’une version 64 bits d’Access, vous allez devoir revoir tous les appels API, en faisant globalement 2 changements :

  1. Ajouter la mention PtrSafe à chaque instruction Declare Function, qui devient donc Declare PtrSafe Function.
  2. Remplacer la plupart des types Long, dans ces déclarations, par des types LongPtr. Mais pas tous ! Seuls les pointeurs mémoire sont concernés, les valeurs de type Long qui servent simplement à transférer des valeurs ne sont pas impactées.

D’autres aménagements peuvent être nécessaires, au cas par cas. Notamment si un appel API utilise une structure mémoire qui a été modifiée sur Windows 64 bits.

ShellExecute version 64 bits

Si vous avez lu l’article original, vous avez vu qu’il démarrait justement par des déclarations de fonctions API, en 32 bits. Remplacez le code donné par ce qui suit, et vous obtenez l’équivalent 64 bits :

Le mode d’emploi de ces fonctions ne change pas en 64 bits. Si vous souhaitez des exemples, consultez l’article original.

Pour aller plus loin

Dans un prochain article, on verra comment faire en sorte que les codes 32 bits et 64 bits puissent cohabiter, de façon à faire tourner votre code VBA sur un Windows 32 ou 64 bits, indifféremment. Et sans modifier votre base de données à chaque changement de Windows.

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *