Tls Callback geht unter Debug unter Release nicht



  • Hi,
    ich hab mal ne frag:

    Dieser Code:

    #include <windows.h>
    #include <stdio.h>
    
    #pragma comment(linker, "/INCLUDE:__tls_used")
    
    void NTAPI callback(PVOID pVoid, DWORD dwReason, PVOID pVoid2)
    {
    	if(dwReason == 1)
    		MessageBox(NULL, TEXT("hallo"), TEXT("CALLBACK"), 0);
    }
    
    #pragma data_seg(".CRT$XLB")
    PIMAGE_TLS_CALLBACK p_thread_callback = callback;
    #pragma data_seg()
    
    int main(int argc, char** argv)
    {
            MessageBox(NULL, TEXT("muh"), TEXT("muhg"), 0);
    	return 0;
    }
    

    funktioniert wunderbar. Die MessageBox mit hallo wird aufgerufen. Wenn ich jetzt aber mit Release Konfiguration übersetzte gehts nicht mehr.

    Kann mir einer verraten warum !?

    Danks
    Gruß Pingu

    PS: IDE VC++ 2k8 express deswegen au in diesem Subforum 😉



  • Wieso denkst du dass du in einem TLS Callback eine MessageBox anzeigen könntest?
    Für TLS Callbacks gelten AFAIK die selben Regeln wie für DllMain.

    Mach mal statt der MessageBox ein OutputDebugString rein.



  • Hab jetzt eine Lösung gefunden:

    Man muss die "Komplette Programmoptimierung" deaktivieren.

    C/C++ -> Optimierung -> Komplette Programmoptimierung = Nein

    So hats zumindestens bei mir geklappt.

    Aber laut dem hier KPNC Blog sollte es nur gehen, wenn mindestens eine andere DLL, außer die kernel32.dll, mit einem EntryPoint geladen wird.

    Aber laut "Dependencie Walker" lad ich nur die "Kernel32.dll"

    Komisch komisch 😕

    Gruß Pingu


Anmelden zum Antworten