0x80004005 : la bibliothèque de matériaux qui refuse de s'ouvrir
vendredi 22 mai 2026Il y a quelque temps, je vous parlais de 0x80004005, la réponse à presque tout, ce code d'erreur qui ne veut rien dire et qu'Inventor vous renvoie dès que quelque chose se passe mal. Cette semaine, il m'est retombé dessus dans un cas suffisamment instructif pour mériter son propre article.
Le symptôme
Sur une machine de test, l'ouverture d'une bibliothèque de matériaux (un fichier .adsklib) plantait avec ce stack trace :
System.Runtime.InteropServices.COMException (0x80004005): Erreur non spécifiée (Exception de HRESULT : 0x80004005 (E_FAIL))
à Inventor.AssetLibraries.Open(String FullFileName)
à ...MaterialsManager.GetLibrary(...)
Le code fautif n'a pourtant rien d'exotique :
AssetLibrary library = application.AssetLibraries.Open(materialsLibraryPath);
Et le plus déroutant : le fichier .adsklib existe bien sur le disque, et il n'est pas vide. On a donc un E_FAIL brut, sans le moindre indice sur la nature réelle du problème. Du 0x80004005 dans toute sa splendeur.
L'enquête
Quand AssetLibraries.Open() lève un E_FAIL, les deux suspects habituels sont :
- Une incompatibilité de version. Un
.adsklibest lié à la version d'Inventor qui l'a enregistré. Si la bibliothèque a été créée avec une version plus récente que celle de la machine, l'ouverture échoue. Ici, ce n'était pas le cas : même version d'Inventor de part et d'autre. - Une bibliothèque déjà chargée.
Open()échoue aussi si la bibliothèque est déjà ouverte. Mais le code vérifiait déjà ce cas en amont.
Les deux pistes classiques étant écartées, restait une cause plus discrète.
La vraie cause
Un fichier .adsklib n'est pas autonome. Il référence d'autres fichiers (textures, apparences, ressources liées). Tant que ces fichiers ne sont pas tous présents localement, Inventor refuse de charger la bibliothèque.
Et c'était exactement ça : la bibliothèque avait été récupérée depuis Vault, mais seulement le .adsklib lui-même, sans les fichiers dont il dépend. Une fois tous les fichiers liés obtenus depuis Vault, Open() fonctionnait sans broncher.
Le problème, vous l'aurez compris, c'est que l'API ne dit rien de tout ça. Pas de « il manque tel fichier », pas de « dépendance introuvable ». Juste 0x80004005, et des heures potentielles à chercher au mauvais endroit.
L'interface utilisateur, en revanche, laisse un indice. Dans le gestionnaire de matériaux, la bibliothèque apparaît avec un petit triangle jaune d'avertissement. En le survolant, on lit : « Échec du chargement de la bibliothèque sur ...adsklib ». C'est maigre, mais ça confirme au moins que le problème vient bien du chargement de la bibliothèque, et pas d'ailleurs.

Besoin d'un développement Inventor (iLogic, .NET, VBA, C++) ou Fusion 360 (Python, C++) ? Contactez-moi pour un devis gratuit.