Ueland Skrevet 28. desember 2007 Rapporter Del Skrevet 28. desember 2007 Hepp, Har en MFC DLL i C++ som jeg bruker for å starte et java-program, jeg prøver å få dette til å kunne bli startet i "din" "program files" mappe, noe som er lettere sagt enn gjort. ShellExecute(0, "open", "javaw", "-classpath %ProgramFiles%/VikingCopy VikingCopy", NULL, SW_SHOW); Overnevnte kodesnutt ville jeg da tro skulle fungere (har og prøvd med fnutter rundt classpath), men den medfører bare at java ikke klarer å finne "VikingCopy" klassen. Samme kode kan fint kjøres fra f.eks kommandolinjen uten problem. Noen tips til hvordan jeg får løst dette? Lenke til kommentar
GeirGrusom Skrevet 29. desember 2007 Rapporter Del Skrevet 29. desember 2007 Kanskje det fungerer hvis du bruker system funksjonen istedet? system("javaw -classpath \"%ProgramFiles%/VikingCopy\" VikingCopy"); (eller noe slikt) Lenke til kommentar
Ueland Skrevet 29. desember 2007 Forfatter Rapporter Del Skrevet 29. desember 2007 Den funker, men System kaller det via command-promt, noe som da gir et sort vindu et lite sekund, noe som er litt plagsomt når det er et GUI-program som startes opp. Edit: Testet ut: "WinExec("javaw -classpath \"%ProgramFiles%/VikingCopy\" VikingCopy",SW_SHOWNORMAL);" Men den trigger samme feil som over, mens System funker fint, forruten command-promten) Lenke til kommentar
charlie di meola Skrevet 30. desember 2007 Rapporter Del Skrevet 30. desember 2007 bare slenger ut et forslag GetEnvironmentVariable("ProgramFiles",buf,bufsize); sprintf(buf2,"-classpath \"%s/VikingCopy\" VikingCopy",buf); ShellExecute(0, "open", "javaw", buf2, NULL, SW_SHOW); Lenke til kommentar
Ueland Skrevet 30. desember 2007 Forfatter Rapporter Del Skrevet 30. desember 2007 Det krasjer explorer.exe Charlie. Lenke til kommentar
GeirGrusom Skrevet 30. desember 2007 Rapporter Del Skrevet 30. desember 2007 det kan ha med environment variabler å gjøre. Lenke til kommentar
Dead_Rabbit Skrevet 30. desember 2007 Rapporter Del Skrevet 30. desember 2007 Jeg hadde sjekka ut exec-funksjonene: http://msdn2.microsoft.com/en-us/library/4...c1w(VS.80).aspx Mulig det hadde funka med noe sånt som: char* args{2]; args[0] = "javaw"; args[1] = "-classpath \"%s/VikingCopy\" VikingCopy"; args[2] = 0; _exec("javaw", args); Lenke til kommentar
Ueland Skrevet 30. desember 2007 Forfatter Rapporter Del Skrevet 30. desember 2007 det kan ha med environment variabler å gjøre. Virker slikt, prøvde og med: LPSTR buf; int bufsize; char* buf2; GetEnvironmentVariable("ProgramFiles",buf,bufsize); sprintf(buf2,"javaw -jar %s/VikingCopy/VikingCopy.jar",buf); WinExec(buf2,SW_SHOWNORMAL); Noe som og krasjet explorer. Har gjort om javaapplikasjonen til en jar og har prøvd å starte den med WinExec("javaw -jar %ProgramFiles%/VikingCopy/VikingCopy.jar",SW_SHOWNORMAL); Men da klarer ikke Java å finne jaren, selv om det funker fint ved manuell kjøring.. Lenke til kommentar
charlie di meola Skrevet 31. desember 2007 Rapporter Del Skrevet 31. desember 2007 char* buf2; sprintf(buf2,"javaw -jar %s/VikingCopy/VikingCopy.jar",buf); ^^ ikke så rart at det kræsjer da prøv char buf2[NOK_PLASS]; evt. malloc, for nå prøver sprintf å skrive til en random adresse. men det opprinnelige problemet har nok noe med env variabler å gjøre system() kjører "javaw -classpath x:\program files\ ..." mens de andre kallene vil kjøre bokstavelig talt "javaw -classpath %ProgramFiles% ..." derfor må du bruke GetEnvVar først Lenke til kommentar
Ueland Skrevet 16. februar 2008 Forfatter Rapporter Del Skrevet 16. februar 2008 Gjorde det enkelt med dette problemet, og la filene dynamisk på "documents and settings" mappen, så unngikk jeg hele problemet. Lenke til kommentar
Roptaty Skrevet 6. mars 2008 Rapporter Del Skrevet 6. mars 2008 LPSTR buf; int bufsize; char* buf2; GetEnvironmentVariable("ProgramFiles",buf,bufsize); sprintf(buf2,"javaw -jar %s/VikingCopy/VikingCopy.jar",buf); WinExec(buf2,SW_SHOWNORMAL); Noe som og krasjet explorer. buf og bufsize må settes før funksjonen kjøres. En enviromentvariabel er max 32 767 bytes stor. Det samme gjelder buf2. Minne blir ikke automatisk allokert. Husk også å sjekke returverdien på GetEnviromentVariable. Bruk av sprintf er også en "sikkerhetsrisiko" siden en for stor buf, overskriver buf2, og du får en buffer overflow. Se http://msdn2.microsoft.com/en-us/library/m...188(VS.85).aspx for mer info. 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å