PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [c++] Application::StartupPath; alternative



heatshock
16.10.2008, 22:13
ich such sowas wie


Application::StartupPath;


nur halt kein .net

QpL
16.10.2008, 22:15
http://msdn.microsoft.com/en-us/library/system.windows.forms.application.startuppath.aspx

Meinst du das?

E: Sorry, habs nur schnell überflogen und nen C++ code gesehen - ich such nochmal

heatshock
16.10.2008, 22:16
ja aber


This page is specific to
Microsoft Visual Studio 2008/.NET Framework 3.5

QpL
16.10.2008, 22:20
http://www.gamedev.net/community/forums/topic.asp?topic_id=510880

Das sollte helfen...

heatshock
16.10.2008, 22:37
ich bekomme es irgentwie nicht hin...


argv[0]

funzt nicht da gibt er mir nur irgentwelche nummern aus... immer verschiedene..

und


char module_name[MAX_PATH];
GetModuleFileName(0, module_name, MAX_PATH);
std::string path(module_name);
path.erase(path.find_last_of('\\'), std::string::npos);

da spuckt er mir nur fehler aus..

blackberry
16.10.2008, 22:55
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>


int main(void)
{
char buffer[200];
int i = 0;
GetModuleFileName(0, buffer, sizeof(buffer) - 1);
printf("#1 %s\n", buffer);

/* runterzählen bis gillt: i = 0, oder ein backslash gefunden wurde */
for(i = strlen(buffer); i && buffer[i] != '\\'; i--);
/* bytes verschieben */
memmove(buffer, &buffer[i + 1], strlen(buffer) - i);
/* nullbyte setzen um den rest des strings 'abzutrennen' */
buffer[strlen(buffer) - i] = 0;

printf("#2 %s\n", buffer);
getc(stdin);
return 0;
}

das geht sicher auch einfacher, aber ich habe mal ein bisschen improvisiert und die String-Klasse aus dem "Spiel" rausgelassen...

Ausgabe sieht wie folgt aus:

#1 C:\Users\Home\Desktop\a.exe
#2 a.exe

Über ARGV ginge das dann so (das ist auch Linux kompatibel, solang man den Backslash mit einem normalen Slash ersetzen würde...):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>


int main(int argc, char *argv[])
{
int i = 0;
printf("#1 %s\n", argv[0]);

/* runterzählen bis gillt: i = 0, oder ein backslash gefunden wurde */
for(i = strlen(argv[0]); i && argv[0][i] != '\\'; i--);
/* bytes verschieben */
memmove(argv[0], &argv[0][i + 1], strlen(argv[0]) - i);
/* nullbyte setzen um den rest des strings 'abzutrennen' */
argv[0][strlen(argv[0]) - i] = 0;

printf("#2 %s\n", argv[0]);
getc(stdin);
return 0;
}


Hoffe das hilft dir weiter ;)

heatshock
16.10.2008, 23:23
ja danke das funzt jetz..

zao
17.10.2008, 01:14
char *Buffer = new char[MAX_PATH+2];

GetModuleFileNameA(0, Buffer, MAX_PATH);

MessageBoxA(0, Buffer, "Current FilePath", MB_ICONINFORMATION);

delete[] Buffer;

falls reiner Pfad erwünscht



char *Buffer = new char[MAX_PATH+2];

GetModuleFileNameA(0, Buffer, MAX_PATH);

for(int i = lstrlenA(Buffer); i > 0; i--)
{
if(Buffer[i]=='\\')
{
Buffer[i] = '\0';
break;
}
}

MessageBoxA(0, Buffer, "Current FilePath", MB_ICONINFORMATION);

delete[] Buffer;