Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 05:55

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++] Referenz auf "sich selbst"

Discussion on [C++] Referenz auf "sich selbst" within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
.Resistance's Avatar
 
elite*gold: 17
Join Date: Jul 2009
Posts: 1,562
Received Thanks: 478
[C++] Referenz auf "sich selbst"

Hi
ich bin ein totaler Anfänger in C++, hätte aber eine Frage:
Gibt es in C++ eine Referenz auf den Dateinamen der augeführten Datei (so wie in Perl "$0") oder eine möglichkeit, den Dateinamen zu bekommen. Am besten nur den Namen, ohne Pfad und ohne Windows API

mfg .Resistance
.Resistance is offline  
Old 04/25/2012, 22:26   #2
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
__FILE__

Code:
std::cout << __FILE__ << std::endl;
printf("%s",__FILE__);
Tyrar is offline  
Old 04/25/2012, 22:30   #3
 
.Resistance's Avatar
 
elite*gold: 17
Join Date: Jul 2009
Posts: 1,562
Received Thanks: 478
Bei mir wird dabei der Dateiname der Quellcode Datei auszugeben (test.cpp)
.Resistance is offline  
Old 04/25/2012, 22:38   #4
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
ay, dachte das war gemeint

Code:
PPEB pPeb=nullptr;
__asm
{
    mov eax, fs:[0x30]
    mov pPeb, eax
}
UNICODE_STRING DllName=pPeb->Ldr->InMemoryOrderModuleList.Flink->FullDllName;
DllName müsste in dem fall das erste modul sein (bin mir allerdings dabei nicht 100% sicher )




edit: ansonsten auch das erste argument
Tyrar is offline  
Old 04/25/2012, 22:48   #5
 
.Resistance's Avatar
 
elite*gold: 17
Join Date: Jul 2009
Posts: 1,562
Received Thanks: 478
Ist das nicht aus der WinAPI?
.Resistance is offline  
Old 04/25/2012, 22:56   #6
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by .Resistance View Post
Ist das nicht aus der WinAPI?
kein direkter win api call

ansonsten kannste argv[0] verwenden
Tyrar is offline  
Thanks
1 User
Old 04/25/2012, 23:01   #7
 
.Resistance's Avatar
 
elite*gold: 17
Join Date: Jul 2009
Posts: 1,562
Received Thanks: 478
argv[0] ist ne gute Sache. Damit kann ich weitermachen danke
.Resistance is offline  
Old 04/25/2012, 23:39   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Inline ASM nem C++ Anfänger zu empfehlen, ich glaubs nicht oO
Btw. ist das eigene Modul bzw. selbst die für die Prozesserstellung verwendete .exe nicht immer das erste Modul in der Liste.

Gibt diverse Methoden.
Zum einen den argv[0] Parameter in der main bzw. den entsprechenden CommandLine Parameter in der WinMain.

Dann gäbe es da noch APIs wie GetCommandLine() oder die Kombination
GetModuleFileName( GetModuleHandle(NULL), buf)
MrSm!th is offline  
Thanks
3 Users
Old 05/16/2012, 14:47   #9
 
elite*gold: 0
Join Date: Dec 2011
Posts: 6
Received Thanks: 1
Quote:
Originally Posted by MrSm!th View Post
Inline ASM nem C++ Anfänger zu empfehlen, ich glaubs nicht oO
Btw. ist das eigene Modul bzw. selbst die für die Prozesserstellung verwendete .exe nicht immer das erste Modul in der Liste.

Gibt diverse Methoden.
Zum einen den argv[0] Parameter in der main bzw. den entsprechenden CommandLine Parameter in der WinMain.

Dann gäbe es da noch APIs wie GetCommandLine() oder die Kombination
GetModuleFileName( GetModuleHandle(NULL), buf)
Es muss nicht unbedingt inline asm sein. Er könnte auch __readfsdword( 0x30 ) verwenden. Nur ist dieser ganze Ansatz absolut nicht empfehlenswert.

Übrigens ist der Parameter im GetModuleHandle Makro ein pointer. Korrekt wäre es daher zu schreiben:

Code:
char cMessageBuffer[ MAX_PATH ] = { 0 };
HMODULE hStartupModule = GetModuleHandle( nullptr );
GetModuleFileNameA( hStartupModule, cMessageBuffer, MAX_PATH );
oder

Code:
wchar_t wcMessageBuffer[ MAX_PATH ] = { 0 };
HMODULE hStartupModule = GetModuleHandle( nullptr );
GetModuleFileNameW( hStartupModule, wcMessageBuffer, MAX_PATH );
Ich kopiere die Dinger übrigens auch gerne direkt in std::strings rein. &sString[0] als Adresse. Muss man aber auch selbst vorher auf die "MAX_PATH" einheiten vergrößern.
ny0m is offline  
Old 05/16/2012, 21:06   #10
 
XxharCs's Avatar
 
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,227
falls ich dich richtig verstanden hab willst du sowas:

Code:
CString strName = GetCommandLine();
int pos = strName.ReverseFind( '\\'); 
strName = strName.Mid(1+pos);

cout << strName << endl;
ist nicht so schön oder so, aber du solltest dein ergebnis bekommen
XxharCs is offline  
Reply


Similar Threads Similar Threads
[Festplatte]"Formatiert" sich selbst
11/12/2011 - Technical Support - 8 Replies
Hey Leute ich haben ein riesen Problem mit meiner Externen Festplatte. Also ich habe diese in NTFS formatiert und immer wenn ich Daten aufspiele die externe Festplatte auf einem anderen Pc anstecke dann steht da das ich diese wieder formatieren muss.... Ich weiß aber nicht wieso.
Als POM sich selbst und die gruppe "seelenstein" geben
07/15/2008 - General Gaming Releases - 2 Replies
Iss mir nach nen paar ini runs aufgefallen, habs hier noch net gesehen, vielleicht isses ganz nützlich. Vorm Boss alle auf einen haufen Knuppeln, der POM wirkt wiederbeleben auf die grp (als ob er einen rezzen wollte). Dann ran an den Boss. Wenn einer aus der grp vereckt oder wip, bekommt man die meldung ob man den rez vom POM annehmen will. War ganz lustig als ich vereckt bin und die meldung kam ob ich damit einverstanden bin, dass ich mich selbst rezze lol^^ Wenns Euch gefällt,...



All times are GMT +2. The time now is 05:55.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.