tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
1287
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sandra23 sandra23 ist offline Rookie
    Registriert seit
    Oct 2004
    Beiträge
    8
    Hallole!

    Ich möchte ein von mir erstelltes Dialogfenster von einer Main Funktion aus starten. Habe alles brav in die Resource Files gepackt und es auch schön.
    Nur der Debuger mosert ziemlich rum....:
    First-chance exception in myDialog.exe (KERNEL32.DLL): 0xC0000005: Access Violation.
    Die Meldung erscheint ungefähr 30 mal.
    Hier der Code:

    #include "GUI/resource.h"

    BOOL CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
    case WM_CLOSE:
    PostQuitMessage(0);
    return TRUE;
    break;
    }
    return FALSE;
    }
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char *szCommandline, int iShow)
    {
    // MSG msg;
    // HWND hwnd;

    CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0, (DLGPROC)DlgProc);
    return 0;
    }

    Wahrscheinlich ist es wieder nur ein popliger Fehler.. aber wie so oft sehe ich den Wald vor lauter Bäumen nicht )

    Sandra
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Sollte da nach CreateDialog nicht irgendwo eine MessagePump rumliegen?

    Oder wolltest du einen modalen Dialog machen. Dann müsstest du DialogBox benutzen, die Parameter bleiben gleich.
     

  3. #3
    Avatar von dorado
    dorado dorado ist offline Mitglied Gold
    Registriert seit
    Oct 2004
    Beiträge
    122
    @Endurion
    Du hast sicher recht, dass da die Nachrichtenschleife fehlt. Aber das ist kein Grund für die Access Violation. Das Programm wird halt sofort wieder beendet nach dem WinMain durchlaufen ist.

    Mir scheint eher, dass der Code eigentlich etwas anders aussieht, als Sandra beschrieben hat. Sie wird einiges im Post weggelassen haben.

    @Sandra
    Poste etwas mehr von deinem Code. Vielleicht kannst du auch die Stelle näher definieren, wo bzw. wann die Access Violation auftritt.


    dora
     

  4. #4
    sandra23 sandra23 ist offline Rookie
    Registriert seit
    Oct 2004
    Beiträge
    8
    Solala, hier der vollständige Code, ihr wollt es ja nicht anders (kehehe...sagte der Stollentroll):

    #include "GUI/resource.h"
    #include <afxwin.h>

    --------->hier bekomme ich erst mal einen Compiler-Fehler, wenn nicht irgendeine, ich betone, irgendeine Header-Datei darübersteht.


    BOOL CALLBACK DlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {

    switch(msg)
    {
    case WM_CLOSE:
    PostQuitMessage(0);
    break;

    }
    return FALSE;
    }

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hprevInstance, char *szCommandline, int iShow)
    {
    MSG msg;
    HWND hwnd;


    hwnd = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),0, (DLGPROC)DlgProc);

    ShowWindow(hwnd,iShow);
    UpdateWindow(hwnd);

    while(GetMessage(&msg,0,0,0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return 0;
    }


    Compiliert wird alles ohne Fehler, nur der Debuger spielt verrückt:

    First-chance exception in myDialog.exe (KERNEL32.DLL): 0xC0000005: Access Violation.

    Mit einem Breakpunkt in der Zeile "Show Window.." erscheint bei hprevInsance:
    CXX0030: Error: expression cannot be evaluated.

    Ach ja, ich hab die Dialog Box mit dem Resourcen Ding gemacht und sie über obiges Statement CreateDialog eingebunden. Ist doch richtig?


    Greetz Sandra
     

  5. #5
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Hmm, wenn ich den Code-Schnipsel in ein neues leeres Projekt einsetze, klappt das direkt.

    Ist in deinem Dialog etwas seltsames drin? Kannst du mal das resource.h und xxx.rc File posten?
     

  6. #6
    sandra23 sandra23 ist offline Rookie
    Registriert seit
    Oct 2004
    Beiträge
    8
    resource.h:


    //{{NO_DEPENDENCIES}}
    // Microsoft Developer Studio generated include file.
    // Used by GUI.rc
    //
    #define IDD_DIALOG1 101
    #define IDC_CHECK1 1001
    #define IDC_CHECK2 1002
    #define IDC_CHECK3 1003
    #define IDC_COMBO1 1004
    #define IDC_COMBO2 1005
    #define IDC_STATIC1 1007
    #define IDC_RADIO1 1013
    #define IDC_RADIO2 1014
    #define IDC_RADIO3 1015
    #define IDC_RADIO4 1016
    #define IDC_EDIT1 1020
    #define IDC_EDIT3 1023
    #define IDC_EDIT2 1024
    #define IDC_EDIT4 1025
    #define IDC_EDIT6 1026
    #define IDC_EDIT5 1027
    #define IDC_RADIO5 1028
    #define IDC_RADIO6 1029
    // Next default values for new objects
    //
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE 106
    #define _APS_NEXT_COMMAND_VALUE 40001
    #define _APS_NEXT_CONTROL_VALUE 1035
    #define _APS_NEXT_SYMED_VALUE 101
    #endif
    #endif

    @Endurion
    Der Debuger läuft bei dir ohne zu meckern? Welche Projekteinstellungen hast du gewählt?
    Ich hab ne leere Win32 Anwendung erstellt.
    Äääääähhhhh, wie find ich jetzt den Code zum .rc file
    Arrgghhhhh....
     

  7. #7
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Hab von Visual Studio (2003) ein neues Win32-Projekt erstellen lassen (mit Inhalt) und hab dann einfach deinen Code über den originalen gepastet. Statt deiner Includes habe ich
    #include"stdafx.h" (für die tollen vorkompilierten Header) und #include "resource.h" (für die Defines).

    Das .rc-File liegt in deinem Ordner (oder bei dir in GUI?), einfach in Notepad öffnen, Studio öffnet da ja immer den Dialogeditor.
     

  8. #8
    sandra23 sandra23 ist offline Rookie
    Registriert seit
    Oct 2004
    Beiträge
    8
    Danke für deine Hilfe

    Jetzt glaub ich hab ich den "Fehler".
    Ich hab dem Projekt angegeben "Use MFC in a shared DLL" und es dann irgendwie zum laufen gebracht... frag mich nicht wie.
    Weil jetzt mit einem komplett neuen Projekt bringt der Linker einen Fehler.
    Komisch.
    Ohne MFC und mit kompilierter stdafx funktioniert es ohne die Access Violation.


    Wie kann ich jetzt trotzdem die MFCs verwenden? Die brauche ich für meine anderen Dateien, ne FTP Connection mit CInternetSession z.B.

    Sandra
     

  9. #9
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Uhje, MFC nachträglich "draufzusetzen" ist ziemlich äh. unpraktikabel.
    MFC ist so eine komplett-oder-garnicht API. Ein Projekt nachträglich darauf umzustellen bringt eigentlich nur Probleme mit sich.

    Ich würde da ein neues MFC-Projekt anfangen und da die Dialoge nochmal komplett neu aufbauen. Die Handler kann man dann statt in der Proc in eigene Handler-Funktion pasten und teilweise kann man die Win32-API-Aufrufe auch so drinlassen.

    Wenn das Problem da immer noch auftritt, dann pack doch mal das kleine Projekt zusammen und poste es hier. Kann ja nix Wildes sein.
     

Ähnliche Themen

  1. access violation
    Von alice in wunderlan im Forum Cinema 4D
    Antworten: 3
    Letzter Beitrag: 26.02.10, 12:51
  2. Access Violation bei Wiederholungsabfrage
    Von VB6-User231 im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 05.02.10, 13:25
  3. Unmanaged DLL Access Violation?
    Von engelmarkus im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 15.05.09, 22:58
  4. Access Violation!?
    Von shader09 im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 03.03.08, 15:39
  5. access vîolation
    Von derGugi im Forum Delphi, Kylix, Pascal
    Antworten: 2
    Letzter Beitrag: 15.04.03, 16:10