2015-11-04 1 views
0

J'ai une DLL non gérée C++. Mais je reçois toujours une erreur "Récupération de la fabrique de classe COM pour le composant avec ID_CID {ID} échoué en raison de l'erreur suivante: Classe 80040154 non enregistrée "Utilisation d'une DLL tierce dans le projet ATL

J'ai essayé d'enregistrer cette DLL en utilisant regsvr32, mais pas de succès J'ai lu beaucoup de tutoriel, mais tout ce qu'ils expliquent comment créer un projet ATL à partir de zéro. Et ils n'utilisent pas de DLL ordinaires

Comment puis-je résoudre ce problème?

+0

Il n'y a aucune preuve que ce que vous essayez d'atteindre est ce à quoi la DLL est réellement destinée. Oui, un enregistrement COM est supposé. Plusieurs problèmes possibles, par ex. dépendance de lien statique manquante. –

+0

@Roman R. Merci pour votre réponse. Cette DLL fonctionne dans le projet C++ habituel. Et je dois l'utiliser dans le projet ATL. C'est un grand vieux projet atl. Je ne peux pas le réécrire – Capricornus

Répondre

0

Tous mes précédents projets ATL étaient en 32 bits. Et tout fonctionnait bien.

Ce projet était de 64 bits. J'ai découvert que Visual Studio a un bug: MSBuild ignores linker option "Register Output: Yes" for x64 Platform

Solution 1 (à partir du lien ci-dessus):

<Target Name="RegisterOutput" 
     Condition="'$(EmbedManifest)'=='true' and '$(LinkSkippedExecution)' != 'true' and (('$(Platform)' == 'x64' and ('$(PROCESSOR_ARCHITECTURE)' == 'AMD64' or '$(PROCESSOR_ARCHITEW6432)' == 'AMD64')) or '$(Platform)' == 'Win32')"> 

Solution 2 (j'avais projet C# dans la même solution Je l'ai tellement habitué celui-ci):

Ajouter regsvr32 path_to_cpp.dll à l'événement post-build

Note: vous ne devez pas ajouter regsvr32 d'effectuer une pré-construction car il ne sera pas toujours exécuter (une autre source de problèmes)

De MSDN:

Pre-build events do not run if the project is up to date and no build is triggered.