Toon posts:

[Visual C++] krijg vreemde commandline parameters

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik als C++ beginner ben bezig met het maken van een console applicatie in Visual C++ 2005 (Express Edition). Het programma moet werken met commandline argumenten. In de debug configuration werkt het goed, maar zodra ik de release wil draaien, krijg ik vreemde resultaten. Het maakt niet uit hoeveel argumenten ik meegeef aan het programma, op de een of andere manier is het aantal argumenten dat in het programma aankomt altijd 14, en bevat de argv[] array geheugenadressen als 0x00000000, 0x00000004, 0x00000008, 0x0000000C, enz. Als ik de argumenten probeer uit te printen, krijg ik logischerwijs een access violation.

Ik heb een vermoeden dat het ergens in de linker opties fout gaat, want ik moet in de linker opties sowieso in release mode /ENTRY:main meegeven, anders start mijn programma helemaal niet (gelijk een access violation op adres 0x00000000). In debug mode hoeft dit niet. Op de een of andere manier lijkt het dus alsof VC++ problemen heeft met mijn main-methode.

Ik heb geen project template van VC++ gebruikt, maar gewoon gestart met een Empty project en daar zelf een main.cpp gemaakt, met gewoon een standaard main methode:
C++:
1
int main(int argc, char* argv[])


Wat doe ik fout?

PS: Ik zat te twijfelen of dit topic hier hoorde of in DevTools. Ik heb het hier gepost omdat ik denk dat de fout toch ergens aan mijn kant moet zitten, als dit de fout van VC++ blijkt te zijn, had hij eigenlijk in DevTools moeten staan. :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op vrijdag 19 januari 2007 @ 18:01:
Ik heb een vermoeden dat het ergens in de linker opties fout gaat, want ik moet in de linker opties sowieso in release mode /ENTRY:main meegeven, anders start mijn programma helemaal niet (gelijk een access violation op adres 0x00000000).
Dit klopt sowieso al niet. Hoewel main() voor jou als gebruiker idd het "entry point" is, is het niet het algemene entry point van de startende thread. Die moet namelijk eerst nog eens door een paar lagen aan runtime code heen, die oa dingen initialiseert en de parameters parset voor hij die meegeeft aan main().
Ik heb geen project template van VC++ gebruikt, maar gewoon gestart met een Empty project en daar zelf een main.cpp gemaakt, met gewoon een standaard main methode:
C++:
1
int main(int argc, char* argv[])


Wat doe ik fout?
Niets. Het is neem ik aan wel een console project?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Denk je dat je weet waar de fout ongeveer zit, blijkt hij heel ergens anders te zitten...

Het blijkt dat mijn programma een beetje gestoord werd van een externe static library die ik erbij gebruik (GNU MP). Blijkbaar is die library niet helemaal geschikt voor een VC++ project. Zonder die library treedt het probleem niet op. Die library had ik gecompileerd via visual studio. Ik heb de GMP source opnieuw gedownload, en via MinGW gecompileerd tot een static library. Deze veroorzaakte weer andere foutmeldingen in VC++, maar in Dev-C++ werkt deze wel. Er zit dus niks anders op dan overstappen naar Dev-C++, aangezien het me dus niet lukt een fatsoenlijke static library te compilen die in VC++ werkt... :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 14:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

For what it's worth - als je een static library gebruikt moet deze iig met dezelfde compiler gecompileerd zijn. Wellicht dat je libs van bepaalde compiler(versie)s vrij kunt gebruiken op andere compiler(versie)s, maar over het algemeen is het vragen om problemen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
De library was gecompiled met VC++, maar het VC++ project is samengesteld door een derde partij, niet door de makers van GNU MP. Misschien dat daar ergens iets fout is gedaan waardoor hij niet goed compiled. Maargoed, nu in Dev-C++ doet hij het goed, zelfs zonder warnings, dus gewoon laten zo... :P