DllMain wird nicht aufgerufen! :(



  • nein, auch nicht ... weiß nicht warum der Autor sowas schreibt wenns gar nicht stimmt, er schreibt SEiten drüber, wann wie aufgerufen wird, mit welchen Parametern ... das nervt mich total



  • tja, was kann's denn noch sein 😕
    schau dir die dll mit diesem programm an: http://www.dependencywalker.com/
    sie sollte eine funktion exportieren, die so aussieht: _DllMain@12
    wenn's immer noch nicht geht: man kann in den linkereinstellungen die startfunktion angeben. dort mal 'DllMain' eintragen.



  • danke für deine Antwort, könntest du mir noch sagen, wie man das mit den Linkereinstellungen macht? ich hab nämlich gesucht, aber nichts gefunden, man kann lediglich Parameter fürs Linken angeben aber ka was da hin muss



  • meistens etwa so:
    /entry: "DllMain"
    ...müsstest du mal in der doku deines linkers schauen 😉



  • ok Leute, danke für eure Antworten, ich habs probiert
    /entry: "DllMain" <- hat mein Linker zwar komentarlos geschluckt und die DLL neuerstellt, aber es hat sich nichts geändert ... ich gebs auf



  • Was du in DllMain tun darfst, ist ziemlich eingeschränkt.

    MSDN Library schrieb:

    Calling functions that require DLLs other than Kernel32.dll may result in problems that are difficult to diagnose



  • Hat das irgendwas mit datenbanken zu tun?? 😕



  • nix 😉

    Hast du denn Tipp von net schon befolgt und mit dem Dependency Walker geprüft, ob deine DLL auch die DllMain wirklich exportiert ?



  • Ich hat das gleiche Problem. Es liegt an irgendwelchen Einstellung Preprozessorsymbolen ... das DllMain nicht exportiert wird. Ich habe einfach __declspec(dllexport) vor die Funktion geschrieben. Dann wurde sie aufgerufen.

    Vielleicht hilfst.

    Gruß Thomas



  • #define AS __declspec(dllexport)
    #define SP if (Output == NULL) return (1); *Output = calloc(3,sizeof(char));	if (*Output == NULL) return (2);
    
    BOOL APIENTRY DllMain ( HINSTANCE hInst, DWORD reason, LPVOID reserved )
    {
        switch (reason)
        {
          case DLL_PROCESS_ATTACH:
            OutputDebugString ("DLL_PROCESS_ATTACH"); break;
    
          case DLL_PROCESS_DETACH:
            OutputDebugString ("DLL_PROCESS_DETACH"); break;
    
          case DLL_THREAD_ATTACH:
            OutputDebugString ("DLL_THREAD_ATTACH"); break;
    
          case DLL_THREAD_DETACH:
            OutputDebugString ("DLL_THREAD_DETACH"); break;
        }
        /* Returns TRUE on success, FALSE on failure */
        return TRUE;
    }
    
    int AS asInfo (char **Output, char **Input, int param_cnt)
    {SP;
      FILE *f = fopen("test.txt", "a+");
    
      OutputDebugString ("Diese DLL ist von coolzero");
      MessageBox(0,TEXT("Diese DLL ist von coolzero :-)"),TEXT("DLL Funktionen"),0);
      sprintf(*Output, "Error von %s\n\n", *Input);
    
      fprintf(f, "Input[0] <%s>\n", Input[0]);
      fprintf(f, "Input[1] <%s>\n", Input[1]);
      fprintf(f, "Input[2] <%s>\n", Input[2]);
    
      free(Output); close(f);
      return (1);
    }
    

    #define SP if (Output == NULL) return (1); *Output = calloc(3,sizeof(char)); if (*Output == NULL) return (2);
    // Hier wird Speicher angefordert für das was du übergeben willst!

    Das Prog. Dependencies, zeigt: " asInfo " als Funktionsname!

    "OutputDebugString" kann man mit dem Programm 'DebugView von Sysinternals' auslesen!

    Im DevC++, unter den Proj.-Einstellungen sind folgende Werte drinn:
    Compiler: "-DBUILDING_DLL=1"
    C++Compiler: "-DBUILDING_DLL=1"
    Linker: "--no-export-all-symbols --add-stdcall-alias -lgmon"

    Ich hoffe, ich habe jetzt nichts vergessen! 😃 😕


Anmelden zum Antworten