Le code VBA peut-il instancier et utiliser des objets .NET? La classe spécifique qui m'intéresse est System.IO.Compression.GZipStream.Comment puis-je utiliser des objets .NET à partir d'Excel VBA?
Pour Info GAC est le Global Assembly Cache .NET
Le code VBA peut-il instancier et utiliser des objets .NET? La classe spécifique qui m'intéresse est System.IO.Compression.GZipStream.Comment puis-je utiliser des objets .NET à partir d'Excel VBA?
Pour Info GAC est le Global Assembly Cache .NET
Je pense qu'Andy a cloué cette réponse, mais je ne suis pas certain que l'aspect concernant les règles de chargement du CLR soit exact. L'assembly .NET qui contient la classe faisant office de wrapper pour GZipStream sera exposé à COM et enregistré comme toute autre bibliothèque et classe de projet COM. À cet égard, VBA trouverait l'emplacement de l'assembly COM .NET exposé via le registre. Il peut être judicieux de mettre l'assembly dans le GAC, afin qu'il ne puisse pas bouger (puisque le déplacement de l'assembly invaliderait les informations de registre), mais tant que le registre pointe au bon endroit, ça devrait aller.
Un bon tutoriel débutant sur le sujet est here
Hope this helps ...
VBA peut utiliser des objets .NET qui sont exposés à COM. Je ne sais pas si GZipStream est ou non, mais je suppose qu'il serait plus facile pour vous de créer un objet .NET séparé qui est un wrapper autour de la fonctionnalité de GZipStream que vous souhaitez utiliser. Vous pouvez ensuite exposer votre objet à COM, puis VBA doit l'utiliser. Notez que l'assembly contenant votre objet COM (et sa bibliothèque de types aussi, je pense, bien que je ne sois pas positif sur cela) doit soit être dans le même répertoire que l'exécutable principal (winword.exe, ou quoi que ce soit) ou dans le GAC. Ceci est dû aux règles de chargement du CLR pour les assemblages.
je viens de rappeler avoir lu quelque part que pour utiliser un objet .NET de COM, l'assemblage soit nécessaire pour être en le même répertoire que l'exe, ou dans le GAC. Ça fait longtemps, donc je pourrais très bien me tromper. – Andy
Cela me semble aussi juste! (lol) Mais je pense que ce que vous avez écrit est comment le CLR recherche les assemblages .NET et s'applique probablement aussi à COM sans enregistrement. Ce cas recherche un assembly .NET, mais en ce qui concerne l'appelant COM, ils ne connaissent même pas .NET. –
+ 1 ... Maintenant vous pouvez commenter ... –