CreateDialog -> Debug Access Violation

sandra23

Grünschnabel
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
 
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.
 
@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
 
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
 
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?
 
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....
 
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.
 
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
 
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.
 
Zurück