Avatar billede nubi19 Nybegynder
17. august 2002 - 15:02 Der er 25 kommentarer og
3 løsninger

Path til programmet der kører, hvordan ?

Hvis jeg nu har mit program til at køre, hvordan får jeg så lettest den fulde sti til programmet (helst inkl. .exe filens navn) ?
Og når jeg så har fået den og skal lave dobbelt backslash, er det så ikke nærmest nemmest at tjekke hvert tegn, og kopiere over i en anden string, og når der så er en backslash, så smider den 2 over istedet for 1. ?
Avatar billede soreno Praktikant
17. august 2002 - 15:03 #1
er det et console eller windows program ?
Avatar billede soreno Praktikant
17. august 2002 - 15:17 #2
i begge tilfælde kan du med:
#include <windows.h>
char path[MAX_PATH];
GetCurrentDirectory(MAX_PATH, path);

få fat i path, men det med filnavnet er jeg ikke helt klar over.

hvis det er en console app kan du med:
int main(int argc, char **argv)
cout << argv[0];

få fat i filnavnet, men hvis nu filen eksekveres sådan:
c:\sti\til\mit\program\run.exe
så er det outputtet ved argv[0]
Avatar billede nubi19 Nybegynder
17. august 2002 - 15:18 #3
det er ikke et console program :(
Avatar billede soreno Praktikant
17. august 2002 - 15:27 #4
sådan så:
#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  char path[MAX_PATH];
  GetModuleFileName(hInstance, path, MAX_PATH);

  MessageBox(NULL, path, "Info:", MB_OK);
  return 0;
}
Avatar billede nubi19 Nybegynder
17. august 2002 - 15:36 #5
Hmmm får 3 errors:
[C++ Error] Unit1.cpp(20): E2141 Declaration syntax error.
[C++ Error] Unit1.cpp(27): E2139 Declaration missing ;.
[C++ Error] Unit1.cpp(27): E2190 Unexpected }.
linie 20 er den første med int APIENTRY osv.
Avatar billede nubi19 Nybegynder
17. august 2002 - 15:36 #6
Bruger btw. Borland C++ Builder 4.0
Avatar billede soreno Praktikant
17. august 2002 - 15:43 #7
prøv at poste den kode der giver fejlen.. :-)
Avatar billede nubi19 Nybegynder
17. august 2002 - 15:55 #8
Hehe den har du jo selv postet, det var bare din kode sat ind i en ny app, for lige at tjekke den.
Avatar billede nubi19 Nybegynder
17. august 2002 - 15:55 #9
Men her er den så:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <windows.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
  char path[MAX_PATH];
  GetModuleFileName(hInstance, path, MAX_PATH);

  MessageBox(NULL, path, "Info:", MB_OK);
  return 0;
}
}
//---------------------------------------------------------------------------
Avatar billede soreno Praktikant
17. august 2002 - 15:59 #10
ja, det har du ret i, men jeg kan jo ikke vide hvilke linier som hører til hvad.. :-)

jeg må nok erkende at jeg ikke kender bcb, men min intuition siger mig at du ikke kan have en WinMain metode i din FromCreate metode. Desværre kan jeg ikke komme med forslag til hvordan det løses, men måske andre kan ?
Avatar billede nubi19 Nybegynder
17. august 2002 - 16:05 #11
Linie 20 er den med int APIENTRY, 27 er bare 7 længere nede.
Men det er rigtigt nok at det er den winmain den nosser i.
Avatar billede nubi19 Nybegynder
17. august 2002 - 16:06 #12
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
Den linie = declaration syntax error.
Avatar billede soreno Praktikant
17. august 2002 - 16:10 #13
ja, for du kan ikke have en metode inde i en metode. Kan du ikke undersøge om TObject indeholder en metode til at få fat i HINSTANCE til programmet ?

altså:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  HINSTANCE hInstance = Sender-> ??????
  char path[MAX_PATH];

  GetModuleFileName(hInstance, path, MAX_PATH);

  MessageBox(NULL, path, "Info:", MB_OK);
}

kig evt. i hjælpen..
Avatar billede nubi19 Nybegynder
17. august 2002 - 16:18 #14
Sender->InitInstance er den eneste der lyder nogenlunde som noget fornuftigt.
Btw. så virker den originale kode du postede fint, hvis jeg ik smider den i en anden metode, men hvordan kalder jeg den så ?
Avatar billede nubi19 Nybegynder
17. august 2002 - 16:24 #15
InitInstance(TMetaClass * cls, void * instance)
sådan skriver den det, og det fatter jeg jo så en klap af :(
Avatar billede soreno Praktikant
17. august 2002 - 16:26 #16
som tidliger skrevet så kender jeg ikke en dyt til bcb's måde at strukturere koden på - så en anden må træde til..
Avatar billede nubi19 Nybegynder
17. august 2002 - 16:28 #17
Øvkay.
Avatar billede soepro Nybegynder
19. august 2002 - 11:01 #18
I BCB bruger du blot Application->ExeName
Avatar billede kamikaze Nybegynder
19. august 2002 - 12:13 #19
Du kan IKKE have en WinMain i builder - Der er jo en i forvejen, der bare er wrappet væk.

Tilgengæld kan du gøre noget a la:

AnsiString MinSti = Application->Path();
MinSti vil så indeholde det du søger :o)
Avatar billede kamikaze Nybegynder
19. august 2002 - 12:15 #20
soepro >> mener at Application->ExeName(); giver navnet på .exe-filen uden stien...Mens Application->Path(); giver både sti og .exe-navn (så vidt jeg husker!!!)
Avatar billede kamikaze Nybegynder
19. august 2002 - 12:16 #21
(nubi19 >> Husk at skrive at du bruger CBuilder når du opretter spm :o)
Avatar billede nubi19 Nybegynder
19. august 2002 - 16:48 #22
Kamikaze > Jeg undskylder hermed mange gange. Det skal ikke ske igen (forhåbentligt ikke)
Avatar billede nubi19 Nybegynder
19. august 2002 - 16:48 #23
ExeName fungerer :)
Avatar billede nubi19 Nybegynder
19. august 2002 - 16:49 #24
Tak for hjælpen alle 3 btw. :)
Avatar billede kamikaze Nybegynder
19. august 2002 - 21:21 #25
nubi19 >> Det var ikke sådan ment (det med at skrive CBuilder). Du får bare hurtigere, mere præcise og brugbare svar hvis du skriver det, så du skal skam ikke undskylde... :o)
Avatar billede nubi19 Nybegynder
19. august 2002 - 23:48 #26
Det har du jo egentlig ret i, altså at jeg får hurtigere & bedre svar. Så tak :)
Avatar billede soepro Nybegynder
20. august 2002 - 12:33 #27
kamikaze >> Application->Path() = ExtractFilePath(Application->ExeName);
Avatar billede kamikaze Nybegynder
21. august 2002 - 22:24 #28
soepro >> Ok - for længe siden jeg har rodet med builder :o)
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