Deklaration der Dialogfeldaten

fujitsufan

Erfahrenes Mitglied
Hallo zusammen,

bei meinem MFC Projekt habe ich mehrere Klassen.
Manchen Klassen habe ich sogar ein Dialogfeld zugeordnet.

Die Zuordnung habe ich bei der betreffenden Klasse im Headerfile erledigt.
Ein Zuweisung der ID des Dialogfeldes wird hier gemacht.
Code:
public:
    enum { IDD = IDD_DIALOG_MAIN };
Das Problem besteht jetzt darin, dass die ID gar nicht existiert.
Zwar ist diese in der "Resources.h" enthalten und VS2017 kann auch an diese Stelle im Headerfile springen.
Code:
#define IDD_DIALOG_MAIN                 201

Dennoch erscheint beim Compilieren die Fehlermeldung:
Fehler C2065 "IDD_DIALOG_MAIN": nichtdeklarierter Bezeichner

Wenn ich den Bezeichner durch die Deklaration ersetze, erscheint dieser Fehler nicht mehr.
Dafür aber ein anderer und zwar:
LNK2001 Nicht aufgelöstes externes Symbol ""public: virtual struct CRuntimeClass * __thiscall CMainDialog::GetRuntimeClass(void)const " (?GetRuntimeClass@CMainDialog@@UBEPAUCRuntimeClass@@XZ)". CS08_CANwizard C:\Workspace_CAN\SVN_Projekte\Branch\CS08_CANwizard\CS08_CANwizard\MainDialog.obj 1

Code:
enum { IDD = 201 }; //IDD_DIALOG_MAIN

Ich vermute stark, dass das betreffende Headerfile vom Compiler bearbeitet wird
bevor die "Resources.h" bekannt bzw. vom Compiler eingelesen wurde.

Leider kann ich die "Resources.h" nicht als Include - Anweisung einbinden.
Da mecker der Compiler auch.

Vielen Dank im voraus.
Fujitsufan
 

fujitsufan

Erfahrenes Mitglied
Hallo,

wie gesagt, jetzt habe ich die "Resources.h" incudiert.
Jetzt meckert aber der Compiler:

Fehler LNK2001 Nicht aufgelöstes externes Symbol ""public: virtual struct CRuntimeClass * __thiscall CMainDialog::GetRuntimeClass(void)const " (?GetRuntimeClass@CMainDialog@@UBEPAUCRuntimeClass@@XZ)". CS08_CANwizard C:\Workspace_CAN\SVN_Projekte\Branch\CS08_CANwizard\CS08_CANwizard\MainDialog.obj

Leider kann ich die Klassenfunktion "GetRuntimeClass" nicht finden.
Im cpp - , und im h- file nicht.


Oder liegt der Fehler ganz wo anders?
Zu meiner Schande muss ich gestehen, die Fehlermeldungen kann ich oft gar nicht interpretieren.

MfG.
Vielen Dank!
Fujitsufan
 

vfl_freak

Premium-User
Moin,
LNK2001 Nicht aufgelöstes externes Symbol
diese Meldung deutet darauf hin, dass Dein Code auf ein Element (eine Funktion, eine Variable oder eine Bezeichnung) verweist , das der Linker nicht in den Bibliotheken oder Objektdateien finden kann!
https://msdn.microsoft.com/de-de/library/f6xx1b1z.aspx
https://social.msdn.microsoft.com/F...gelstes-externes-symbol?forum=visual_studiode
https://www.c-plusplus.net/forum/topic/301239/error-lnk2001-nicht-aufgelöstes-externes-symbol/2

"GetRuntimeClass " sagt mir so aus dem Stand leider auch nix!
http://docs.roguewave.com/stingray/11.3/Stingray_Studio_API_Documentation/Grid/cgxcontrol_4mk3.htm
https://stackoverflow.com/questions...-myclassgetmessagemap-and-myclassgetruntimecl

Hoffe, das hilft weiter!
VG Klaus
 

Endurion

Erfahrenes Mitglied
Diese GetRuntimeClass war, wenn ich mich recht erinnere, in einem der Defines versteckt. Ich meine, es wäre DECLARE_DYNCREATE und IMPLEMENT_DYNCREATE gewesen.
 

fujitsufan

Erfahrenes Mitglied
Hallo,

erstmals vielen Dank für Eure Hilfe.
Das Problem lag darin, dass ich in meinem Hauptprogramm folgende Anweisung nicht implementiert hatte.
Diese Syntax habe ich im Header-File meines Hauptprogramms implementiert.
C++:
DECLARE_DYNAMIC(CMainDialog)

Diese Syntax habe ich im Cpp-File meines Hauptprogramms implementiert.
C++:
IMPLEMENT_DYNAMIC(CMainDialog, CDialog)
Der Hinweis auf das Include des Header-Files "Resources.h" war irreführend.

Warum das Programm zuvor funktioniert hat ist mir bis jetzt eine Rätsel.
Ende gut, alles gut.

Mit freundlichen Grüßen
Fujitsufan