Question

J'ai un problème avec un simple fichier inclus.

Le fichier en cours d’inclusion se trouve dans deux programmes MFC - l’un d’eux est une dll, et il se compile également en une dll non-mfc.

Récemment, j’utilisais la plus grande DLL qui entoure la source de la plus petite DLL lorsque je voulais accéder à certaines des fonctionnalités du code original qui n’est pas exposé par la plus grande DLL.

Comme c'était un test, j'ai simplement ajouté le source à mon projet et appelé les fonctions. J'ai eu cette erreur: erreur de syntaxe: manquant ')' avant ';'

Le fichier est correctement inclus et j'ai les fichiers .cpp et .h dans le dossier source et dans le projet, mais il ne compilerait pas.

J'ai finalement créé un très petit projet test, main.cpp, spooler.cpp et spooler.h (le spouleur est un wrapper autour des communications) et j'ai essayé de le compiler. Même problème.

J'ai donc extrait toutes les informations relatives à la DLL au cas où un problème étrange se produirait et qui ne compilerait toujours pas.

Je ne peux pas penser à ce qui ne va pas dans la vie de moi. Quelqu'un d'autre a-t-il des idées?

p.s. Jeff, vous devez vraiment ajouter la possibilité de joindre des fichiers car la source remplirait trop d’écrans de données.

Était-ce utile?

La solution

Cela n'a rien à voir avec la façon dont vous incluez des fichiers, c'est une erreur de syntaxe que vous obtenez parce que vous n'avez pas imbriqué ( et ) correctement.

Autres conseils

Générez à l'aide de l'option / P, ce qui créera un fichier prétraité (généralement avec l'extension .i).

Dans Visual Studio, l'option sera sur les propriétés du projet sous quelque chose comme:

C/C++  -  Preprocessor  -   Generate Preprocessed File

Avec cela, vous pouvez voir exactement comment les macros sont développées. Vous devrez peut-être exécuter le fichier .i par le biais du compilateur pour rechercher la ligne exacte à l'origine de l'erreur de syntaxe. Il peut être pénible de lire le fichier post-prétraité, mais il devrait montrer ce qui se passe.

Sans la source, il est difficile de savoir exactement ce qui se passe. D'après la première partie de votre question, il semble que ce code particulier soit compilé correctement dans le projet où il a été utilisé pour la première fois, mais il n'est plus compilé lorsque vous l'incluez dans votre deuxième projet. Si tel est le cas, vous souhaitez examiner les autres en-têtes inclus avant celui-ci. Parfois, si vos noms de fonction ou de variable sont identiques à quelque chose défini dans un autre en-tête, en particulier windows.h, vous pouvez obtenir des erreurs du code précédemment compilé sans problème.

Si ce code a jamais compilé correctement, les autres réponses vous suggérant de vérifier l'ouverture / la fermeture "(" sont probablement l'endroit pour commencer.

Votre compilateur devrait vous dire sur quelle ligne l'erreur était allumée. Essayez de rechercher le précédent "(") avant la fin de cette ligne.

Vous devez savoir à quoi les choses évoluent. En particulier, qu'est-ce que ID_SPOOLER_EVENT? S'il y a des parenthèses déséquilibrées, c'est votre coupable. Sinon, suivez les conseils de Mike B. Cela ressemble à un problème de préprocesseur.

Le code utilisé:

// the only two includes
#include <windows.h>
#include "spooler.h"
// in WinMain
// create window then...
ShowWindow (hwnd, iCmdShow);
UpdateWindow (hwnd);

SpoolerInitiallize( hwnd, ID_SPOOLER_EVENT ); // <-- our function
...

Et oui, je sais que le mot est mal orthographié et que le mot initialize est mal orthographié dans la documentation. Malheureusement, il ne peut pas être modifié car nous fournissons également cette dll à des tiers.

Essayez ce que Mike B a déclaré au préprocesseur.

Cette suggestion m'a rappelé pourquoi cette erreur semblait si familière. Pour moi, il s'agissait d'un très court #define qui remplaçait un nom de variable par un littéral int ou quelque chose comme ça. Nasty.

L’exécution du code par l’intermédiaire du préprocesseur est la façon dont j’ai découvert ce qui se passait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top