Access Violation und keine Ahnung wieso



  • Krieg nachdem ich dann Wallpaper gesetzt habe immer ne AV weiß aber überhaupt nicht warum da das programm schon so funktioniert wie ich es mir vorgestellt habe und dann kommt die immer nach dem ändern des desktops 😞
    Hier die relevante funktion.Vielleicht weiß jemand den Grund.

    {
        CoInitialize(0);
    
        HRESULT hr;
    
        IActiveDesktop *pActiveDesktop;
    
        hr = CoCreateInstance(::CLSID_ActiveDesktop, NULL, CLSCTX_INPROC_SERVER,
                          IID_IActiveDesktop, (void**)&pActiveDesktop);
    
     if( SUCCEEDED(hr) )
    {
    
       wchar_t* name;
    
       int iSize = pfad.WideCharBufSize();
    
       name = new wchar_t(iSize + 1);
    
       hr = pActiveDesktop->SetWallpaper(pfad.WideChar(name,iSize),0);
    
       WALLPAPEROPT wpo;
    
       wpo.dwSize = sizeof(WALLPAPEROPT);
    
       wpo.dwStyle = WPSTYLE_STRETCH ;
    
       hr = pActiveDesktop->SetWallpaperOptions(&wpo, 0);
    
       hr = pActiveDesktop->ApplyChanges(AD_APPLY_ALL);
    
       pActiveDesktop->Release();
    
       CoUninitialize();
    
       delete name;
       }
    
    }
    


  • CoUninitialize(); ?????????????
    


  • fragg schrieb:

    CoUninitialize(); ?????????????
    

    Darin liegt es nicht habs mal auskommentiert und die AV kam trotzdem



  • Hallo,

    an welcher Zeile tritt die AV denn auf?
    Kann der Fehler davon kommen, dass Du für pActiveDesktop kein gültiges Objekt hast?
    Falls Du mit
    name = new wchar_t(iSize + 1);
    ein Feld anlegen willst, probier es lieber mal mit
    name = new wchar_t [iSize + 1];

    Gruss
    Frank



  • An welcher Stelle tritt die AV denn auf(Debugger)???



  • komischerweiße innerhalb des try catch blocks

    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
            try
            {
                     Application->Initialize();
                     Application->CreateForm(__classid(TForm1), &Form1);
                     Application->Run();
    Hier bleibt er stehen    --> }
            catch (Exception &exception)
            {
                     Application->ShowException(&exception);
            }
            return 0;
    


  • Frank71 schrieb:

    Hallo,

    an welcher Zeile tritt die AV denn auf?
    Kann der Fehler davon kommen, dass Du für pActiveDesktop kein gültiges Objekt hast?
    Falls Du mit
    name = new wchar_t(iSize + 1);
    ein Feld anlegen willst, probier es lieber mal mit
    name = new wchar_t [iSize + 1];

    Gruss
    Frank

    trivial 😡 name = new wchar_t(iSize + 1); anscheinend war es das, denn mit []Klammern kommt sie nicht. Danke



  • na, ganz ruhig bleiben, tief Luft holen, auf 10 zaehlen 😉
    Aber das soll anderen auch schon passiert sein.

    Ciao
    Frank


Anmelden zum Antworten