Hilfe, unverständlicher Code-Abschnitt

Gast #6139706
Hallo zusammen,

ich verstehe hier was nicht und komme nicht weiter. Hier wird ja die 
Funktion getAppDirBaseName definiert. In ihr wird die Funktion 
GetModuleHandleEx aufgerufen, die als Parameter wiederum 
getAppDirBaseName bekommt. Als Variable ist getAppDirBaseName nirgends 
definiert, auch global nicht. So sieht es aus, als ruft 
getAppDirBaseName hier sich selbst auf aber ohne Parameter. Aus der 
Rekursion kenne ich sich selbst aufrufende Funktionen, aber hier sieht 
es ja nicht so aus und der Aufruf ist ja ohne Parameter. Versteht jemand 
vielleicht was hier Sache ist?

1
int getAppDirBaseName(LPTSTR lpBaseName, DWORD nSize)
2
{
3

4
  HANDLE hProcess;
5
  HMODULE hModule;
6
  char * lastSlash;
7
  BOOL bHandle;
8

9
  //let's get the process of this code
10
  hProcess = GetCurrentProcess();
11

12
  bHandle= GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,(LPCSTR) getAppDirBaseName,&hModule);
13

14
  if(hModule != NULL)
15
  {
16
    if(!GetModuleFileNameEx(hProcess, hModule, lpBaseName, nSize))
17
    {
18
      return(1);
19
    }
20
    lastSlash = strrchr(lpBaseName, '\\');
21
    if(lastSlash == NULL)
22
    {
23
      return(1);
24
    }
25
    *(lastSlash+1) = '\0';
26

27
    return(0);
28
  }
29
  return(1);
30
}
Gast #6142834
Schöner Code!
Aber der Parameter "getAppDirBaseName" obwohl ein Funktionszeiger wird 
hier als Code-Adresse benutzt, um daraus das Modulhandle (Exe, Dll) wo 
die Funktion getAppDirBaseName() implementiert ist zu finden.
Und damit dann den Namen der Exe bzw. Dll.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.