Avatar billede ladyhawke Novice
17. september 2004 - 09:13 Der er 14 kommentarer og
1 løsning

GetModuleFileName() i Visual C++ kun sti

Hvordan får man stien fra ovennævnte funktion (altså eksklusive filnavn)?

Det er nok noget streng gymnastik, men hvordan?

Hvis du har en anden måde at finde stien til programmets exe fil runtime er det også fint...
Avatar billede wisen Nybegynder
17. september 2004 - 09:36 #1
Hvis du bruger C++ 7, så findes der en klasse CPath der kan diverse ting - bla. fjerne filnavn (RemoveFileSpec())
Avatar billede ladyhawke Novice
17. september 2004 - 09:40 #2
Jeg bruger C++ 7, men kender ikke CPath... Kan du komme med det kode eksempel?
Avatar billede wisen Nybegynder
17. september 2004 - 10:00 #3
Noget i stil med ...

CPathA path;

DWORD dwLen = GetModuleFileName( _AtlBaseModule.GetModuleInstance(), CStrBufA(path, MAX_PATH + 1), MAX_PATH + 1 );
if( dwLen == 0 || dwLen == MAX_PATH+1 )
  return FALSE;

if( !path.RemoveFileSpec() )
  return FALSE;

// path indeholder stien...
Avatar billede ladyhawke Novice
17. september 2004 - 10:04 #5
får en fejl: CPath: undeclared identifier

Mangler jeg en include eller sådan noget?
Avatar billede wisen Nybegynder
17. september 2004 - 10:07 #6
Ja, du skal ha' en #include <atlpath.h>
Avatar billede ladyhawke Novice
17. september 2004 - 10:11 #7
Jeg får en masse nye fejl hvis jeg tilføjer den include: f.eks. 'PathAddBackslashA': is not a mamber of 'operator``global namespace'"

Hvordan slipper jeg af med den?
Avatar billede wisen Nybegynder
17. september 2004 - 10:16 #8
... kan du ikke poste lidt af din kode
Avatar billede ladyhawke Novice
17. september 2004 - 10:20 #9
jo da:

#include "stdafx.h"
#include "BundleSetup.h"
#include "BundleSetupDlg.h"
#include ".\bundlesetupdlg.h"

#include <fstream>
#include "string.h"
//#include <atlpath.h>

.....

CString strPath;
GetModuleFileName(0, strPath.GetBuffer(_MAX_PATH),  _MAX_PATH);
strPath.ReleaseBuffer();
//    CPath pathDir = CPath(PATH_MODULE);
//    pathDir.RemoveFileSpec();
MessageBox(strPath, "Module location", MB_OK);

CPath delen er kommenteret ud fordi den ikke virker pga. de ene af de 2 fejl jeg har angivet
Avatar billede wisen Nybegynder
17. september 2004 - 11:23 #10
.. det her oversætter fint ved mig :

CString strPath;
GetModuleFileName(0, strPath.GetBuffer(_MAX_PATH),  _MAX_PATH);
strPath.ReleaseBuffer();
   
CPath pathDir = CPath(strPath);
pathDir.RemoveFileSpec();

MessageBox(NULL, strPath, "Module location", MB_OK);


... prøv evt. at bruge en CPathA
Avatar billede ladyhawke Novice
17. september 2004 - 11:25 #11
den kan ikke finde CPath hos mig, men dette virker:

CString strPath;
GetModuleFileName(0, strPath.GetBuffer(_MAX_PATH),  _MAX_PATH);
strPath.ReleaseBuffer();
strPath = strPath.Left(strPath.ReverseFind('\\\\'));

og tak for hjælpen, jeg kom da på ret kurs
Avatar billede wisen Nybegynder
17. september 2004 - 11:28 #12
hmm... mærkeligt...
Avatar billede ladyhawke Novice
17. september 2004 - 11:58 #13
Jeg ved ikke hvorfor jeg ikke kan bruge CPath, men det kan jeg forske i senere, nu har jeg i hvert fald fundet en løsning :o)
Avatar billede wisen Nybegynder
17. september 2004 - 12:35 #14
hehe - Ja, det er da i det mindste noget :)
Avatar billede arne_v Ekspert
18. september 2004 - 14:38 #15
Det her er hverken C++, MFC eller andet:

  char buf[1000];
  GetModuleFileName(NULL,buf,sizeof(buf));
  *(strrchr(buf,'\\')+1) = '\0';
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