2009-05-21 17 views
0

Dies ist ein C-Programm, das war ich mit, in der Header-Datei ich eine Offset definieren:kann nicht #defined Konstante in C zugreifen

#define LDR_DATA_PATHFILENAME_OFFSET 0x24 // MODULE_ITEM.PathFileName 

Später im Programm, das ich es wie folgt verwendet werden:

gefunden Symbol "LDR_DATA_PATHFILENAME_OFFSET" nicht:
pImageName = (PUNICODE_STRING)(((DWORD)(pUserModuleListPtr)) + 
(LDR_DATA_PATHFILENAME_OFFSET-dwOffset)); 

Wenn der Wert von LDR Inspektion ich erhalte eine CXX0017: Fehler. Ähm, es ist definiert, es kompiliert, aber es kann nicht auf den Wert zugreifen! Was mache ich falsch?

+2

Was meinen Sie mit "es kompiliert"? CXX0017 sieht wie ein Compilerfehler aus. Woher kommt das? http://msdn.microsoft.com/en-us/library/7cw9d870(VS.71).aspx –

Antwort

7

Ich nehme an, dass Sie Ihre Anwendung debuggen, weil Sie "inspecting" sagten: Symbolische Konstanten werden durch seine Werte zur Kompilierzeit ersetzt. Zur Laufzeit kann man sie nicht mehr sehen.

+2

Während es nicht klar ist, wo er die Variable "inspiziert", ist es eindeutig ein Fehler bei der Kompilierung, den er eingefügt hat. –

+0

@Dan, es sieht aus wie ein Compiler-Fehler, aber es ist nicht. Es ist tatsächlich ein Fehler vom Debugger. –

0

Suchen Sie die Option in Ihrem Compiler, um die vorverarbeitete Quelle auszugeben, damit Sie sehen können, was wirklich vor sich geht. Ihr Symbol wurde möglicherweise nicht definiert, oder Ihre Kopfzeile wird nicht wie erwartet korrekt angezeigt.

-1

Verwenden Sie einen älteren C-Compiler? Sie verwenden einen C++ - Stil-Kommentar // anstelle des C-Stil-Kommentars von/* * /. Ältere C-Compiler erkennen das // nicht.

+0

Nein, es ist ein neuer Compiler. – flavour404

3

Sind Sie sicher, dass Ihre Header-Datei enthalten ist? Einfacher Check - Kopieren Sie die # define aus der Header-Datei an den Anfang Ihrer C-Datei.

Überprüfen Sie die #ifndef Wächter in Ihrer Header-Datei.

+0

Was ist die #ifndef-Anweisung? Wenig verwirrt. Ich untersuche die #define zur Laufzeit, also weiß ich jetzt, dass der Wert nicht mehr für die Inspektion verfügbar ist. Ich bin verärgert über C++ strikte Eingabe, versuchen, ein Zeichen in eine Funktion zu übergeben, aber sobald ich das tue, scheint es, dass mein Funktionsaufruf gemangelt wird, und ich sehe keinen Grund, warum ?! – flavour404

+1

#ifndef wird häufig als Include-Guard verwendet, siehe http://en.wikipedia.org/wiki/Include_guard Wenn Ihre Header-Datei falsch #ifndef ist, kann die Header-Datei vor dem Laden verhindert werden. Das ist nur eine wilde Vermutung, ich habe es ein paar Mal gesehen. Wichtiger - haben Sie versucht, die gleiche Definition in die C++ - Datei, die Sie debuggen, zu kopieren und einzufügen? –