Domanda

Ho un problema con un semplice file incluso.

Il file incluso si trova in due programmi MFC, uno dei quali è una dll e si compila anche in una dll non mfc.

Recentemente stavo usando la dll più grande che avvolge la sorgente della dll più piccola quando volevo accedere ad alcune delle funzionalità del codice originale che non sono esposte dalla dll più grande.

/ p>

Dato che si trattava di un test, ho semplicemente aggiunto la fonte al mio progetto e chiamato le funzioni. Ho ricevuto questo errore: errore di sintassi: mancante ')' prima ';'

Il file è incluso correttamente e ho sia il .cpp che il .h nella cartella sorgente e all'interno del progetto ma non si compila.

Alla fine ho creato un progetto di test molto piccolo, main.cpp, spooler.cpp e spooler.h (lo spooler è un wrapper attorno alle comunicazioni) e ho provato a compilarlo. Stesso problema.

Quindi ho strappato tutte le cose relative alla DLL nel caso in cui ci sia uno strano problema in corso con quello e ancora non verrà compilato.

Non riesco a pensare alla mia vita cosa sia sbagliato. Qualcun altro ha qualche idea?

P.S. Jeff, devi davvero aggiungere la possibilità di allegare i file perché la fonte riempirebbe troppe schermate di dati.

È stato utile?

Soluzione

Questo non ha nulla a che fare con il modo in cui includi i file, è un errore di sintassi che ottieni perché non hai nidificato correttamente ( e ) .

Altri suggerimenti

Compilare usando l'opzione / P, che creerà un file preelaborato (di solito con l'estensione .i).

In Visual Studio, l'opzione sarà sulle proprietà del progetto in qualcosa del tipo:

C/C++  -  Preprocessor  -   Generate Preprocessed File

Con ciò puoi vedere esattamente come si stanno espandendo le macro. Potrebbe essere necessario eseguire il file .i tramite il compilatore per trovare la riga esatta che causa l'errore di sintassi. Leggere il file post-elaborato può essere una seccatura, ma dovrebbe mostrare cosa sta succedendo.

Senza la fonte è difficile essere sicuri esattamente cosa sta succedendo. Dalla prima parte della tua domanda sembra che questo particolare codice si compili correttamente nel progetto in cui è stato usato per la prima volta, ma quando lo includi nel tuo secondo progetto non si compila più. In questo caso, vuoi vedere quali altre intestazioni sono incluse prima di questa. A volte, se i nomi delle tue funzioni o variabili sono uguali a quelli definiti in un'altra intestazione, in particolare windows.h, puoi ottenere errori dal codice precedentemente compilato senza problemi.

Se questo codice non ha mai compilato correttamente, le altre risposte che suggeriscono di controllare l'apertura / chiusura " (" sono probabilmente il punto di partenza.

Il compilatore dovrebbe dirti su quale riga si trovava l'errore. Prova a cercare il precedente " (" prima della fine di quella riga.

Devi scoprire a cosa si espandono le cose. In particolare, cos'è ID_SPOOLER_EVENT? Se ha parentesi sbilanciate, questo è il tuo colpevole. Altrimenti, segui il consiglio di Mike B. Mi sembra un problema con il preprocessore.

Il codice utilizzato:

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

E sì, so che è stato scritto in modo errato e anche la parola inizializzazione è scritta in modo errato in tutta la documentazione. Purtroppo non può essere modificato poiché forniamo anche questa dll a terze parti.

Prova cosa Mike B ha detto con il preprocessore.

Quel suggerimento mi ha ricordato perché quell'errore sembrava così familiare. Per me, è stato un #define molto breve che ha sostituito un nome di variabile con un int letterale o qualcosa del genere. Nasty.

L'esecuzione del codice attraverso il preproccessore è il modo in cui ho scoperto cosa stava succedendo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top