28. november 2007 - 11:45Der er
4 kommentarer og 1 løsning
Kompilering fra kommando-prompt
Jeg bruger normalt Borland C++Builder 5.0, men sommetider har jeg brug for at indsætte assembler-statements i C++ kode, og det kan jeg af en eller anden mærkelig grund ikke få til at virke med C++Builder. Men jeg har opdaget, at hvis jeg kompilerer et program fra en kommando-prompt kan det godt lade sig gøre. Så er der til gengæld det underlige, at jeg er nødt til at køre den exe-fil, der kommer ud af det, fra kommando-prompten. Så virker det, som det skal. Men hvis jeg bare dobbeltklikker filen, så slutter programmet øjeblikkeligt. Jeg har ellers sat switchen -tW som parameter til bcc32.exe - og det skulle jo frembringe et Windows-program.
Men det må vel alligevel blive opfattet som et konsol-program. Hvordan undgår jeg det, så jeg kan starte programmet normalt ved at dobbeltklikke?
Ja, der var vel egentlig to spørgsmål i mit spørgsmål:
1. Hvis jeg har et C++ program i C++Builder og kompilerer det, så virker det, som det skal. Indsætter jeg så et assembler-statement, f.eks bare
asm nop
...sådan rent forsøgsvis, så skriver den "Restarting compile using assembler". Den laver så en fil med endelsen .asm
Denne fil inkluderer jeg i programmet ( og jeg fortæller den osse, hvor den kan finde diverse include-filer ), men nu vil den ikke kompilere. Det virker bare ikke, og jeg aner ikke hvorfor.
2. Det andet ( og egentlige ) spørgsmål går så på, at jeg godt kan indsætte assembler-statements og få det til at virke, bare jeg kompilerer fra en kommando-prompt. Men så skal mit program osse STARTES fra en kommando-prompt. Hvis jeg bare dobbeltklikker exe-filen, når jeg kun lige at se, at der sker et eller andet. Og så lukker programmet ned øjeblikkeligt.
Nu har jeg fundet ud af, hvad jeg skal gøre for at kunne starte programmet ved at dobbeltklikke, men det ændrer ikke på, at jeg synes, det er mærkeligt:
Programmet starter en dialogbox...
int DialogBoxParam( HINSTANCE hInstance, // handle to application instance LPCTSTR lpTemplateName, // identifies dialog box template HWND hWndParent, // handle to owner window DLGPROC lpDialogFunc, // pointer to dialog box procedure LPARAM dwInitParam // initialization value );
...og det viser sig, at hvis jeg lader hWndParent være NULL, så fungerer det. Så kan jeg både starte programmet fra en kommandoprompt og ved at dobbeltklikke filen. Men hvis hWndParent faktisk ER "handle to owner window", så SKAL det startes fra en kommandoprompt!
Er der en, der kan forklare, hvordan det kan være?
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.