0x80004005 la réponse à presque tout

mercredi 21 janvier 2026

Il y a quelque chose de très agaçant quand on développe avec l'API Inventor : quand il y a un problème, 90% du temps, la réponse est 0x80004005.

0x80004005, la réponse à presque tout

Et ça, ça rend le débogage très frustrant. N'ayant aucune indication sur la nature du problème, on doit tout vérifier et ça peut prendre du temps, beaucoup de temps.

La documentation n'aide pas. Certaines documentations, comme celle de Microsoft (MSDN), ont pour chaque fonction/méthode une section Exceptions qui liste les exceptions qui peuvent être levées. Mais dans le cas d'Autodesk Inventor, il n'y a pas ce type d'information.

Résultat, on peut passer des heures pour ce rendre compte à la fin que le problème vient d'un répertoire non existant, d'un nom de propréité qui n'a pas la bonne casse ou encore d'un paramètre qui n'est pas dans les valeurs attendues.

Alors pourquoi est-ce que les développeurs d'Autodesk ne retournent pas des messages plus explicites ?

C'est en fait lié à la technologie sous-jaccente : COM. C'est une technologie très ancienne qui date des années 90. A l'époque, on n'avais pas les exceptions standardisées en C++ et on ne se souciait pas vraiment de la qualité des messages d'erreur. Quand on avait une erreur, on écrivait le plus souvent :

if (something_bad) return E_FAIL;

Et on passait à autre chose.

Il faut dire que pour retourner un message plus explicite, il fallait employer quelque chose comme :

CComPtr<ICreateErrorInfo> cei;
CreateErrorInfo(&cei);
cei->SetDescription(L"Le fichier est corrompu");
cei->SetSource(L"MonComObject");
CComPtr<IErrorInfo> ei;
cei->QueryInterface(&ei);
SetErrorInfo(0, ei);
return MY_E_BAD_DATA;

C'est verbeux et facile à oublier.

Donc les développeurs ne le faisaient pas, et c'est pourquoi on a toujours 0x80004005 (et que je m'arrache les cheveux).

Notez que si le développeur est consciencieux et qu'il fait les choses correctement, le runtime .NET va appeler GetErrorInfo pour récupérer le message d'erreur et va utiliser sa description pour créer un objet COMException qui sera ensuite levé.


Coup de pouce Besoin d'un développement Inventor (iLogic, .NET, VBA) ? Contactez-moi pour un devis gratuit.