Tr1llobite Skrevet 20. april 2004 Del Skrevet 20. april 2004 Jeg har denne koden for å generere en kommandolinje: LPSTR MakeCommandLine() { char* result = "msg * /SERVER:"; LPSTR Message; LPSTR Target; Target = ExtractWndText(GetDlgItem(MainWnd, (int)EDIT_HOST)); Message = ExtractWndText(GetDlgItem(MainWnd, (int)EDIT_MESSAGE)); strcat(result, Target); strcat(result, " /V /W "); strcat(result, Message); return (LPSTR) result; } p.s: ExtractWndText er en egendefinert funksjon Dene koden gir en exception (vstudio 6), vet noen hvorfor? Såvidt jeg har forstått det, putter strcat det andre argumentet på det første (f.eks result + Target). Hvis dette er feil er det ikke rart . Litt dårlig forklart, kanskje, men men... Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) man 3 strcat: DESCRIPTION The strcat() function appends the src string to the dest string overwriting the `\0' character at the end of dest, and then adds a terminating `\0' character. The strings may not overlap, and the dest string must have enough space for the result. The strings may not overlap, and the dest string must have enough space for the result. malloc, realloc og free er løsningen her. Endret 20. april 2004 av søppel Lenke til kommentar
Tr1llobite Skrevet 20. april 2004 Forfatter Del Skrevet 20. april 2004 Søppel, hadde du giddet å skrive dette om for meg: strcat(result, Target); strcat(result, " /V /W "); strcat(result, Message); Skjønner ikke helt. Betyr dette at jeg ikke kan bruke strcat to ganger etter hverandre? Eller må det noe imellom? Jeg er litt newbie ennå. Når jeg begynte med c++ hoppet jeg over standardsakene og gikk rett på GUI programmering, siden jeg hadde mye erfaring fra Delphi fra før. Lenke til kommentar
kjetil7 Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) Det han prøver å fortelle deg er at du må allokere mer plass til result strengen din: char* result = (char*) malloc(512); strcpy(result , "msg * /SERVER:"); /* ... */ Edit: oops... så ikke at du returnert result (!)... da må du bruke malloc/realloc hvis du koder C (slik søppel sa). Bruker du C++ anbefaler jeg std::string. Endret 20. april 2004 av kjetil7 Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) Når jeg begynte med c++ hoppet jeg over standardsakene og gikk rett på GUI programmering, siden jeg hadde mye erfaring fra Delphi fra før. C/C++ != Delphi Du må nok hoppe en tur innom "standardsakene", før du hopper til GUI-programmeringen igjen. Et tårn uten skikkelig grunnmur faller fort fra hverandre. :] Endret 20. april 2004 av søppel Lenke til kommentar
Tr1llobite Skrevet 20. april 2004 Forfatter Del Skrevet 20. april 2004 (endret) EDIT: Fjernet alt og skrev på nytt: Kjetil7: Jeg prøvde std::string, men fikk feil, dessuten vil jeg lære fullt ut hvordan bruke char. Hvordan bruker jeg realloc da? Endret 20. april 2004 av kr1570ffz0r Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) Ta en tur innom amazon.co.uk; les hva andre sier om de forskjellige bøkene. Ha i tankene hvilket nivå du (tror?) du ligger selv. malloc o.s.v. er forresten mer en C-ting. Selv om mange C++ bøker også nevner dem sånn litt. Jeg greier meg utmerket med det Bjarne nevner i boken sin (The C++ Programming Language), de gangene jeg er borti malloc o.s.v. Så har man diverse online oppslagsverk: http://www.cppreference.com/stdmem.html Edit: Og så har man man-pages for linux, stikk til konsollet og skriv man malloc. Endret 20. april 2004 av søppel Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) Bruk std::string som kjetil7 sa, og konverter til char* sent; når du først trenger det, ta en titt her: http://scm.nostdal.net/cgi-bin/viewcvs.cgi...er.pdf?rev=HEAD ..og her: http://scm.nostdal.net/cgi-bin/viewcvs.cgi....viewcvs-markup Da slepper du å bruke malloc o.s.v. ... og i stedet for strcat og strcpy o.s.v., så bruker du disse: http://www.cppreference.com/cppstring.html ...mye enklere, og kraftigere. :] (men spørs om det er like greit å skaffe seg en bok) Edit: ..og hvis du insisterer på å bruke char* og malloc fremfor std::string, tror jeg det må en bok til for å forklare dette med minne, pekere, allokering, deallokering .. o.s.v. Hvis du ikke greier å finne ut av hvordan du bruker malloc og pekere og sånnt med materiale du finner online da. Endret 20. april 2004 av søppel Lenke til kommentar
Tr1llobite Skrevet 20. april 2004 Forfatter Del Skrevet 20. april 2004 Generelt kan jeg en del om programmering, men C++ har jeg akkurat begynt med. Delphi er ikke det samme, nei, men API-funksjonene er de samme, så derfor vil det bli ganske likt. Kan du Delphi er det enklere å lære C++. Mangen som driver med programmering undervurderer Delphi enormt, of sier at det ikke er annet enn et enkelt WYSIWYG program. Nei. Delphi er ikke det samme som VB (LO-life). Det tillater, som Marco Cantü sier: "real programming". VCL er kanskje en forenkling, men alt blir litt lettere. Med sakene som følger med Delphi kan du lage en del. I C++ er det mer slit og det tar generelt sett lenger tid. Delphi er en del enklere, for du trenger ikke kunne en dritt for å lære det. Delphi er og vil alltid forbli mitt hovedpråk, men C++ er kjekt til andre, mer avanserte ting, men da har du alltids assembler. Ingenting vondt ment i teksten over. Jeg er bare litt lei av at folk preiker dritt om Delphi, selv om du ikke nødvendigvis gjorde det. Uansett, takk for all hjelp! Lenke til kommentar
kjetil7 Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) EDIT: Fjernet alt og skrev på nytt: Kjetil7: Jeg prøvde std::string, men fikk feil, dessuten vil jeg lære fullt ut hvordan bruke char. Hvordan bruker jeg realloc da? Dette er svært grunnleggende saker og er veldig viktig hvis du ønsker å bruke C++. Du er sjanseløs hvis du ikke bruker tid på å forstå det grunnleggende før du begynner med GUI. Men her er to enkle forslag. Den første bruker new[] og char, mens det andre bruker std::string. char versjonen er strengt tatt mer effektiv, men det er ikke bra kode det jeg har laget her. For det første må du passe på å slette minnet du returnerer med delete[] (ikke bare delete), og for det andre er det mer vanlig å ha følgende prototype: int MakeCommandLine(char* buf, size_t bufLen); Du kan eventuelt prøve å skrive om eksempelet til å bruke prototypen over. Kanskje du lærer noe i dag også Eksempel 1: char* MakeCommandLine() { char* result = 0; const char* target = ExtractWndText(GetDlgItem(MainWnd, (int)EDIT_HOST)); const char* message = ExtractWndText(GetDlgItem(MainWnd, (int)EDIT_MESSAGE)); size_t len = strlen(message) + strlen(target); result = new char[len + 22]; if(result) { sprintf(result, "msg * /SERVER:%s /V /W %s", target, message); } return result; } Eksempel 2: std::string MakeCommandLine2() { std::string result("msg * /SERVER:"); result += ExtractWndText(GetDlgItem(MainWnd, (int)EDIT_HOST)); result += " /V /W "; result += ExtractWndText(GetDlgItem(MainWnd, (int)EDIT_MESSAGE)); return result; } Du bruker ganske enkelt ikke malloc/realloc/free i C++ hvis du ikke innkapsler det i en egen klasse (dvs. internt bruk i en klasse). Edit: leif Endret 20. april 2004 av kjetil7 Lenke til kommentar
☀ ❄ Skrevet 20. april 2004 Del Skrevet 20. april 2004 Kjetil7: Jeg prøvde std::string, men fikk feil, dessuten vil jeg lære fullt ut hvordan bruke char. Du vil ikke lære "standardsakene", men du vil lære å bruke strcat()? Og du vil lære strcat, men du vil ikke lære std::string? Jaja... Lær deg std::string, og resten av The Standard C++ Library, og så kan du surre med C-funksjoner en gang i fremtiden når du kjeder deg og vil kaste bort noen timer på unødvendig debugging Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) Edit: lei av at folk preiker dritt om Delphi Vet ikke hvor/hvem du fikk den idéen/inntrykket fra. At Delphi ikke er det samme som C/C++ er ikke "dritt" .. det er fakta. ..samme.. At C/C++ ikke er det samme som Delphi er ikke "dritt" .. det er fakta. ..og derfor kan du ikke hoppe inn i et C/C++-miljø og regne med at alt er som i et Delphi-miljø. Diskusjoner rundt andre språk (eller språkvalg generellt) enn C/C++ er for meg totalt uinteressant; og hører hjemme under "Generell/annen programmering". Endret 20. april 2004 av søppel Lenke til kommentar
☀ ❄ Skrevet 20. april 2004 Del Skrevet 20. april 2004 ...men C++ er kjekt til andre, mer avanserte ting, men da har du alltids assembler. Opera, f.eks., er skrevet i C++. Dagens lille oppgave: Skriv Opera i asm. Lenke til kommentar
Tr1llobite Skrevet 20. april 2004 Forfatter Del Skrevet 20. april 2004 (endret) Lol. Tror dere misforstod litt, og at jeg skrev litt uforståelig. Jeg vet at C++ ikke er LITT det samme som Delphi, men det går mye i det samme NÅR DU PROGRAMMERER WIN32 API. Beklager at jeg ikke spesifiserte det. Og den gang jeg begynte med C++ ville jeg ikke lære standardene- nå vil jeg det. (ustabilt menneske, jeg ) Uansett klarte jeg å løse problemet mitt nå, så tusen takk, igjen, for all hjelp. Tror jeg går ned på bokhandelen og kjøper meg en bok om C++ på mandag, for da har jeg penger. Og det med opera: Se linje 2... Edit: Leif (uforstående -> Uforståelig) Endret 20. april 2004 av kr1570ffz0r Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) ..men det går mye i det samme NÅR DU PROGRAMMERER WIN32 API. Selv om (event. hvis vi tenker oss at) Cola skrives/uttales Cola på kinesisk og engelsk, behøver ikke resten være det samme. (Når du er ute etter å bestille Cola over disken og skal forme en setning.) (de har sikkert et eget ord/tegn/lyd på Cola også kanskje.. i dunno.. men hvis ikke) ..men, uansett - jeg tror du har fattet poenget. Husk at det er billigere å bestille bøker fra amazon.co.uk enn fra bokhandler her i norge. Lykke til. :] Endret 20. april 2004 av søppel Lenke til kommentar
Tr1llobite Skrevet 20. april 2004 Forfatter Del Skrevet 20. april 2004 (endret) Jeg er ikke helt tjukk i pappen heller. Forresten, var det en noe nedverdigende tone? Hm? *hissig* Når du programmerer i WIN32 API, går det i det samme uansett. Eksempel: Du kan ikke begynne å lage vinduer med CreateProcess funksjonen. Endret 20. april 2004 av kr1570ffz0r Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) [offtopic svada] Jeg er ikke helt tjukk i pappen heller. Jeg gikk nemlig ut i fra det. Forresten, var det en noe nedverdigende tone? Hm? *hissig* Ja, jeg er konstant nedvedigende. Spesiellt når det virker som jeg prøver å skjule det. Heldigvis er det sånn med ironien også. Og døh? - Tørk det fliret av trynet ditt; hvis ikke gjør jeg det. *hidr* Når du programmerer i WIN32 API, går det i det samme uansett.Eksempel: Du kan ikke begynne å lage vinduer med CreateProcess funksjonen. OK, du vet best. Jeg får ta det til etteretning til neste gang. Fa1! Nå klikket vstudio... Sånn går det når du ikke er helt tjukk i pappen heller. [/offtopic svada] jeje Edit: Forslag: Du redigerer posten din ovenfor når du eventuellt måtte ha noe å spørre om - så redigerer jeg denne og forsøker å svare. Endret 20. april 2004 av søppel Lenke til kommentar
Tr1llobite Skrevet 20. april 2004 Forfatter Del Skrevet 20. april 2004 [MER offtopic svada] Jeg skrev dette: Når du programmerer i WIN32 API, går det i det samme uansett. Eksempel: Du kan ikke begynne å lage vinduer med CreateProcess funksjonen. Og du sier "jeg vet best". Kanskje jeg er bare dum, men det er fortsatt min mening. Nå er programmet ferdig, men det holder ikke mål (bare le). Og forresten, vstudio klikket p.g.a. dårlig maskin. Men snart får jeg ny maskin, og da skal det bli andre boller. Og nå må jeg kjøpe bok, for basisene i C++ er noe jeg ikke duger til... Jeg må også fortelle om en kamerat av meg: Hver gang han hører om noe mer avansert skal han bruke det, uansett hvor vanskelig det er og hvor lite kunnskap han har. Jeg introduserte ham til Delphi, men han ville ha C++. Han begynte med C++, men lærte ingenting. Og så fortalte jeg ham om hvor du skaffer en ASM compiler. Jeg viser ham et lite hello-world program i ASM, og så skal han plutselig bruke det i stedet... Han kan ikke engang basic! litt html, kanskje. Også et lite spm. til: Når jeg skal bruke funksjonen InitCommonControls() får jeg bare en error når jeg linker programmet: "Undefined reference: InitCommonControls@et-eller-annet". Jeg har hørt at common controls dll'en skal loades automatisk, men at du skal bruke denne funksjonen for å sikre at dll'en blir lastet inn i minnet. Snålt. Lenke til kommentar
søppel Skrevet 20. april 2004 Del Skrevet 20. april 2004 (endret) InitCommonControls() er utgått (obsolete). InitCommonControlsEx(..) er visst tingen nå. http://msdn.microsoft.com/library/default....moncontrols.asp Hvis du forsatt får undefined reference må du adde comctl32.lib eller comctl32.dll (ellernoe) i link-options et sted. Edit: Og du sier "jeg vet best". Kanskje jeg er bare dum, men det er fortsatt min mening. Nei, jeg sa: "..du vet best..". Endret 20. april 2004 av søppel Lenke til kommentar
Tr1llobite Skrevet 20. april 2004 Forfatter Del Skrevet 20. april 2004 (endret) Jeg får brukt common controls, så det hele er litt snålt. Jeg prøvde InitCommonControlsEx også, samme erroren. Men det er ikke et problem, jeg får, som sagt brukt common controlsene. Forresten, vet noen hvor du kan finne "uxtheme.h" headeren? I Delphi sin UxTheme.pas står dette skrevet: (*HPPEMIT 'include <uxtheme.h>'*) men denne filen tror jeg er lagret internt i Delphi compileren eller noe sånt. Spørsmålet er vel egentlig: Hvordan kan jeg tegne ved hjelp av themes i C++? Edit: Themes.pas er bare en unit som gjør det lettere å bruke UxTheme.pas Endret 20. april 2004 av kr1570ffz0r Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå