4 votes

Lorsque j'essaie de compiler un fichier .dll, j'obtiens une erreur avec le mot-clé interface

J'ai mis en place un projet dans Visual Studio pour créer une .dll. J'ai inclus une bibliothèque externe dans le projet qui utilise le mot clé "interface". Je reçois l'erreur suivante :

erreur C2146 : erreur de syntaxe : ';' manquant avant l'identifiant 'INuiAudioBeam'

Il s'agit des lignes de code où l'erreur se produit :

#ifndef __INuiAudioBeam_FWD_DEFINED__
#define __INuiAudioBeam_FWD_DEFINED__
typedef interface INuiAudioBeam INuiAudioBeam; //Error on this line
#endif

Le code ci-dessus fait partie d'un fichier d'en-tête dans la bibliothèque externe que j'ai incluse. Le projet se construit sans erreur lors de la compilation sans inclure les en-têtes de la bibliothèque (Note : Lier la bibliothèque ne pose aucun problème).

Quelle est la solution ? Est-ce parce que j'ai une bibliothèque externe que j'utilise pour créer ma dll ? Dois-je créer une .lib au lieu d'une dll ?

5voto

FrozenKiwi Points 589

Si quelqu'un d'autre fait des recherches dans ce sens, le problème est très probablement le suivant

#define WIN32_LEAN_AND_MEAN

Avant

#include <windows.h>

Supprimez la définition, assurez-vous que vous incluez Windows.h, et cela devrait définir le mot-clé de l'interface pour vous.

1voto

Roman Brod Points 11

Vous pouvez obtenir le C2146 avec la mise en accusation du mot-clé interface. Il peut être difficile de comprendre comment un mot-clé peut être indéfini, d'autant plus que dans d'autres unités de compilation ou projets qui utilisent le même fichier d'en-tête - dont l'inclusion a causé le problème - tout se passe bien. Cependant, le mot-clé apparent "interface" est toujours une directive #define du compilateur. Il se trouve simplement enfoui dans un fichier d'en-tête que quelques développeurs ont des raisons d'inspecter : le fichier d'en-tête <objbase.h> . Elle y est définie en deux étapes :

#define __STRUCT__ struct
#define interface __STRUCT__

Depuis l'entrée en vigueur de la <objbase.h> est inclus dans plusieurs autres fichiers d'en-tête - tels que ole2.h, oleauto.h, et une série d'en-têtes ATL - vous pouvez être surpris par cette erreur alors qu'aucun de ces en-têtes n'a été inclus dans l'unité de compilation actuelle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X