Pregunta

Tengo un problema con un archivo incluido simple.

El archivo que se incluye está en dos programas MFC, uno de los cuales es una dll, y también se compila en una dll no-mfc.

Recientemente estuve usando la dll más grande que rodea la fuente de la dll más pequeña cuando quería acceder a algunas de las funciones del código original que no están expuestas por la dll más grande.

Como se trataba de una prueba, simplemente añadí la fuente a mi proyecto y llamé las funciones. Recibí este error: error de sintaxis: falta ')' antes de ';'

El archivo está correctamente incluido, y tengo tanto el .cpp como el .h en la carpeta de origen, y dentro del proyecto, pero no se compilaría.

Eventualmente creé un proyecto de prueba muy pequeño, main.cpp, spooler.cpp y spooler.h (el spooler es un envoltorio alrededor de las comunicaciones) y traté de compilarlo. Mismo problema.

Así que arranqué todas las cosas relacionadas con dll en caso de que haya un problema extraño con eso y aún no se compile.

No puedo pensar en mi vida lo que está mal. ¿Alguien más tiene alguna idea?

p.s. Jeff, realmente necesitas agregar la capacidad de adjuntar archivos porque la fuente llenaría demasiadas pantallas con datos.

¿Fue útil?

Solución

Esto no tiene nada que ver con la forma en que incluyes los archivos, es un error de sintaxis que recibes porque no anidaste correctamente ( y ) .

Otros consejos

Construya usando la opción / P, que creará un archivo preprocesado (generalmente con la extensión .i).

En Visual Studio, la opción estará en las propiedades del proyecto en algo como:

C/C++  -  Preprocessor  -   Generate Preprocessed File

Con eso puedes ver exactamente cómo se están expandiendo las macros. Es posible que deba ejecutar el archivo .i a través del compilador para encontrar la línea exacta que causa el error de sintaxis. Puede ser un dolor leer el archivo preprocesado, pero debería mostrar lo que está pasando.

Sin la fuente, es difícil estar seguro de lo que está sucediendo. Desde la primera parte de su pregunta, parece que este código en particular se compila correctamente en el proyecto donde se usó por primera vez, pero cuando lo incluye en su segundo proyecto ya no se compila. Si este es el caso, quiere ver qué otros encabezados están incluidos antes de este. A veces, si los nombres de sus funciones o variables son iguales a los definidos en otro encabezado, especialmente windows.h, puede obtener errores del código que se compiló previamente sin problema.

Si este código nunca se compiló correctamente, entonces las otras respuestas que sugieren que compruebes la apertura / cierre " (" probablemente sean el lugar para comenzar.

Tu compilador debería decirte en qué línea estaba el error. Intente buscar el " anterior (" antes del final de esa línea.

Necesitas descubrir a qué se expanden las cosas. En particular, ¿qué es ID_SPOOLER_EVENT? Si tiene paréntesis desequilibrados, ese es tu culpable. Si no, bueno, sigue el consejo de Mike B. Esto me parece un problema de preprocesador.

El código que se está utilizando:

// 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
...

Y sí, sé que está mal escrita y que la palabra inicializar está mal escrita en toda la documentación también. Desafortunadamente, no se puede cambiar ya que también suministramos esta dll a terceros.

Pruebe lo que Mike B dijo con el preprocesador.

Esa sugerencia me recordó por qué ese error me pareció tan familiar. Para mí, fue un #define muy corto que reemplazó un nombre de variable con un int literal o algo así. Desagradable.

Ejecutar el código a través del preprocesador es cómo descubrí lo que estaba sucediendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top