Avatar billede swaxi Nybegynder
09. marts 2005 - 14:27 Der er 10 kommentarer og
1 løsning

compile i ikke-console mode

Jeg har lavet et program, der virker fint, når jeg compiler og kører det, med følgende :
cl /clr helloworld.cpp

når programmet kører, åbner det en konsol. hvis jeg husker rigtigt er det noget med, at programmer under windoows kan compiles til enten at køre i console-mode, eller i noget-andet-som-jeg-ikke-kan-huske-mode. Jeg vil gerne have compilet mit program til det andet. (Så man ikke kan se, at programmet kører)

Nogen andelse om, hvordan det gøres ?
Avatar billede arne_v Ekspert
09. marts 2005 - 14:31 #1
med csc er det /t:winexe så check lige om ikke det er det samme med cl
Avatar billede swaxi Nybegynder
09. marts 2005 - 14:38 #2
hmm ... nej, desværre.
cl : Command line warning D4002 : ignoring unknown option '/t:winexe'
Avatar billede arne_v Ekspert
09. marts 2005 - 14:50 #3
Hvad med:

/link /subsystem:windows
Avatar billede swaxi Nybegynder
09. marts 2005 - 15:18 #4
hm ... det lader til at virke - delvist.

cl /clr HelloWorld.cpp /link /subsystem:windows

LIBCMT.lib(wincrt0.obj) : error LNK2019: unresolved external symbol _WinMain@16
referenced in function _WinMainCRTStartup
HelloWorld.exe : fatal error LNK1120: 1 unresolved externals

Mon ikke det er fordi, main skal hedde noget andet når man compiler til win32 ? (syntes at kunne huske noget i den stil)
Avatar billede swaxi Nybegynder
09. marts 2005 - 15:26 #5
Hmm ... fandt denne her :
http://support.microsoft.com/default.aspx/kb/125750/EN-US/

Til syneladende burde jeg kunne specificere et "entrypoint". Der står desværre bare ikke noget om, hvordan det gøres fra commandline ?
Avatar billede arne_v Ekspert
09. marts 2005 - 15:41 #6
Hvordan er din main erklæret ?
Avatar billede swaxi Nybegynder
09. marts 2005 - 15:46 #7
int _tmain() {
}
Avatar billede swaxi Nybegynder
09. marts 2005 - 15:47 #8
Jeg har prøvet med både
cl /clr Lellobot.cpp /link /subsystem:windows /export:wWinMainCRTStartup
og
cl /clr Lellobot.cpp /link /subsystem:windows /export:_tmain
Avatar billede swaxi Nybegynder
09. marts 2005 - 16:41 #9
Hm ... jeg fandt en workaround. det er ikke så elegant, men det virker da. I fald andre skulle have samme ønsker :

int _tmain() {
    // If started without args. Relaunch self and exit
    String* args[] = Environment::GetCommandLineArgs();
    if (args->Length == 1) {
        String* sBinary = S"HelloWorld.exe";
        Process* myProcess = new Process;
        try {
            Console::WriteLine("Running process: {0}", sBinary);

            myProcess->StartInfo->FileName = sBinary;
            myProcess->StartInfo->CreateNoWindow = true;
            myProcess->StartInfo->UseShellExecute = true;
            myProcess->StartInfo->RedirectStandardOutput = false;
            myProcess->StartInfo->Arguments = S"Jolly Roger";
            myProcess->StartInfo->WindowStyle = ProcessWindowStyle::Hidden;
            myProcess->Start();
        } catch ( Win32Exception* e )  {
            Console::WriteLine("The process failed:\n{0}", e->ToString());
            return -1;
        }
        return 0;
    }
    // @todo    Do main loop here
}
Avatar billede arne_v Ekspert
09. marts 2005 - 21:43 #10
#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR    lpCmdLine,
                    int      nCmdShow)
{
  return 0;
}

og

cl /clr z.cpp /link /subsystem:windows

ser ud til at virke hos mig
Avatar billede arne_v Ekspert
10. april 2005 - 18:00 #11
OK ?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester