Linking fejl

Tags:    c++

Jeg har aldrig rigtig forstået linking fejl, så jeg vil gerne have noget hjælp. Projektet er skrevet i Microsoft Visual C++, og kan hentes fra dette link:

http://www.dogonfire.dk/Upload/Metronware%20ScioCurio.rar

Koden burde ikke volde nogle overskuelighedsproblemer...

// Your brain is your weapon, do not waste it!!



6 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Når du laver en:
extern int X;
I en header-fil, fortæller du kompileren at der et sted findes en int med navnet X. Det opretter ikke en X, så du skal have følgende i én .cpp fil for at oprette X:
int X;

Derudover kan man ikke initialisere sammen med en extern, så linien:
extern string AppName = "Metronware ScioCurio";
Skal ændres til:
extern string AppName;

Hvis du så ændrer standard.cpp til:
Fold kodeboks ind/udKode 


Og inkluderer den i projectet, burde det spille.



Når du laver en:
extern int X;
I en header-fil, fortæller du kompileren at der et sted findes en int med navnet X. Det opretter ikke en X, så du skal have følgende i én .cpp fil for at oprette X:
int X;

Derudover kan man ikke initialisere sammen med en extern, så linien:
extern string AppName = "Metronware ScioCurio";
Skal ændres til:
extern string AppName;

Hvis du så ændrer standard.cpp til:
Fold kodeboks ind/udKode 


Og inkluderer den i projectet, burde det spille.





Mange tak, det har du selvfølgelig helt ret i... Da jeg havde tilføjet ændringerne til projektet opdagede jeg også en hel række andre små fejl, men de var ikke så sværre at få bugt med. Fx havde jeg skrevet:
(AppName + " Parent").c_str()
Uden at tage højde for at klassen ville have en char pointer, og at den midlertidige variabel der bliver oprettet, kun holdt til linien var læst færdigt.

Jeg kan se i dit eksempel i tråden "Flere vinduer på engang!", at du har to message loops. Men overbelaster du ikke systemet hvis du starter et message loop for hver af de mange childs der skal oprettes? Som du kan se fra min kode har jeg prøvet at nøjes med ét message loop som kun henter beskeder ned til Parent-vinduet og det aktive Child-vindue. Men med min fremgangsmåde, bliver Child-vinduet aldrig markeret - selvom det og flere kan blive oprettet - og alt kører super langsomt!

// Your brain is your weapon, do not waste it!!



Hvis du kun vil have én message loop skal du sætte HWND til 0 (/NULL) for at få den til at virke med alle vinduer i programmet.

At dit system bliver langsomt skyldes sansynligvis at windows sender WM_PAINT til child vinduet igen og igen fordi den ikke bliver behandlet (BeginPaint og EndPaint bliver ikke kaldt).

I mit eksempel er det andet vindue modalt, dvs det er det der er i forgrunden og som modtager og behandler alle beskeder indtil det bliver lukket.



Okay, så nu har jeg et message loop der ser sådan ud:
Fold kodeboks ind/udKode 


Og har tilføjet følgende til Parent-vinduets process:
Fold kodeboks ind/udKode 


Og følgende til Child-vinduets process:
Fold kodeboks ind/udKode 


Var det sådan du mente, for Child vinduerne bliver stadig ikke markeret når de bliver oprettet eller når man markerer dem. Og Jeg kan ikke bruge taster som CTRL+F4 osv.

// Your brain is your weapon, do not waste it!!

[Redigeret d. 11/12-05 16:22:55 af HAP]



Dine vinduer er ikke dialog boxe så det bør ikke være nødvendigt med IsDialogMessage.

Hvis det ikke hjælper så prøv at pakke hele projectet, så skal jeg kikke på det.



t