Den kode du så smukt har udarbejdet kører faktisk perfekt fra Visual C++.
Borland er lidt underlig med sin måde at håndtere sin main-funktion på. Den vil meget gerne have at mainprogrammet er mainformen. Jeg ved ikke helt hvordan man gør sådan noget, men der er en slags main-fil som man kan forsøge at klytte et eller andet i. Den kan jeg selvfølgelig ikke huske hvad heder, men mon ikke den heder noget i stil med det man kalder projektet? Jeg har ikke selv Borland installeret på min computer, da den er for ustabil og laver for mange mærkelige ting til, at jeg giver spilde tid på at debugge selve Borland for fejl, når jeg burde bruge tiden på at debugge mine egne programmer for fejl.
Har du ikke Visual, eller er det en form for religion der gør at du bruger Borland ? (Der er meget af den slags i omløb)..
Der er kun een ting galt: første parameter til MessageBox API'en skal være din main-windows handle.
For at få din kode til at virke, skal du blot vælge New + Console Wizard og så vælge 'Windows GUI'. Du får så en tom WinMain, hvor du blot tilføjer din egen kode (idet du lige indsætter hInstance som handle):
'#pragma argused' er for at undgå warnings på de WinMain parametre du ikke bruger. Du er nødt til at caste hInstance til HWND, for at MessageBox accepterer den som handle.
Du kan også lave en "rigtig" VCL version i BCB, ved at vælge New Application, og dernæst lave Close af Form1 uden at save den. (Hermed er kun WinMain koden tilbage.) Dernæst kopierer du blot din kode ind i den af BCB genererede kode (som du kan finde f.eks. vha. 'View+Project Manager' og dobbeltklik på CPP modulet):
dmk >> C++ Builder er billigere en MVC, og var for mig det naturlige valg, da jeg havde kørt på Borland's Turbo C++ 3.0 og Borland C++ 5.02 før. Jeg har kunnet flytte min kode, uden at gøre andet end at sætte nogle options. Det TROR jeg ikke på at jeg ville have kunnet med MVC. (Men jeg VED det selvfølgelig ikke.)
Soepro >> Så længe du vil lave GUI programmering, så kan jeg da kun anbefale Builder frem for MVC. Det er et helvede at lave brugergrænseflader i MVC. Det skal dog bemærkes, at hvis lykkedes at lave dem i MVC i stedet for borland, så er de som regel mindre tunge at arbejde med, og de går ikke så tit ned i noget underligt VCL kode. Men hvis brugergrænsefladen ikke er det essentielle i ens programmer, men derimod selve koden bag (hvis man fx. laver en server der bare skal køre i en konsol app.), så er Visual meget mere stabil, meget nemmere at debugge og laver meget bedre kode. Det er i hvert fald min erfaring. Men det er selvfølgelig meget en smagssag. Jeg var ikke helt glad for Visual i starten da jeg flyttede fra Borland, og jeg syntes stadig den dag idag, at Borlands editor er rarere at arbejde med en Visuals.
soepro >> Tak skal du have. Det var jo ganske enkelt - og i øvrigt tak for de supplerende kommentarer til programmet mm.
dmk >> Religion? Tja, det kan man godt sige. Ikke fordi jeg absolut vil bruge Borland frem for MVC, men fordi jeg har Borland i forvejen og ikke bruger piratkopier. Borland kunne jeg købe som studerende for kun 500,- så det valgte jeg at gøre. Hvis jeg brugte piratkopier ville jeg nok anskaffe mig MVC, da bogen jeg bruger antager, at man bruger MVC. Grunden til at jeg ikke bruger piratkopier er, at jeg som kristen ikke kan være med til den slags ulovligheder - uanset hvad man mener om microsoft-priser mm. Så religion? Ja, men nok ikke sådan som du mente :-)
-Bjarke
PS: Dog har jeg ikke noget imod at bruge alternativer til microsoft-produkter. Jeg håber også, at jeg en dag får taget mig sammen til at prøve at køre Linux i stedet for Windows...
HWND er en forkortelse for handle, og er blot en pointer der identificerer et-eller-andet. Fx. kender du nok en FILE*, hvilket også blot er et handle.
VCL står for Visual Component Library, og er Borlands standard-bibliotek for gui-komponenter. Alle komponenterne i en borland brugergrænseflade er en del af VCL, alt lige fra en TEdit, TButton TForm og TComponent. VCL er et hirakisk objektorienteret klassebibliotek, hvor alle objekter overhovedet nedarver fra den samme base-klasse (TObject ?, Det er vist ikke den nederste, der er noget lavere endnu).
WINAPI er ikke en returværdi. Din WinMain funktion kan jo ikke returnerer to forskellige ting, og den returnerer allerede en int ! WINAPI er en definement, som er defineret til __stdcall. Det har et eller andet med stak-håndtering at gøre når man kalder den pågældende funktion.
I øvrigt, jeg bruger også selv programmer der er betalt for, selv om jeg ikke selv har skullet slippe noget. Min arbejdsplads har selvfølgelig de rigtige licenser :-) Og jeg er ikke særlig religiøs mht. compiler, der er fordele og ulemper ved det hele. De fleste af dem jeg omgiver mig med i hverdagen bruger KUN g++ (linux), så jeg er lidt af en outsider fordi jeg overhovedet bruger noget til Windows.
bjarke >> Har du så ikke muligheden for at vælge en 'Console Application' ??? Vælg 'File' + 'New'. Så skulle du få en "tab" der hedder 'New', hvorunder der skal ligge en 'Console Wizard' eller 'Console Application'. (Jeg benytter selv C++ Builder 4 men godt nok en PRO udgave - der har jeg Wizarden.)
Tak for hjælpen soepro. Det viste sig, at det skyldtes, at der var noget galt med installationen på studiet og at programmet derfor skulle reinstalleres - så det var rigtigt nok, at jeg ikke kunne lave en console application.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.