Zum Inhalt springen

Board00

Mitglieder
  • Gesamte Inhalte

    49
  • Benutzer seit

  • Letzter Besuch

Beiträge von Board00

  1. Hallo an was kann es liegen das wenn ich ein Programm Kompiliere und danach aufrufe meine CPU Auslastung bei 100% liegt. Das Programm verursacht die 100% auslastung. bei Minimierung geht die Last sofort wieder runter und bei Maximierung des Programms bekomme wich wieder eine CPU Vollast.

    An was für ein problem kann es liegen, bzw. wie kann man erkenne warum das Programm soviel CPu Last brauch.

    MFG

    Board00

  2. Das Problem ist vermutlich, dass du die Strings erst hinzufügst, nachdem die Toolbar mit allen Buttons bereits erstellt wurde.

    Ja, das mache ich. Wie kann man das schon vorher machen oder geht das nicht?

    Nachträgliche Änderungen an dem TBBUTTON-Array wirken sich natürlich nicht automatisch aus. Möglicherweise reicht es, wenn du danach nochmal für jeden Button TB_SETBUTTONINFO verschickst, damit die aktualisierten Stringindizes auch bei der Toolbar ankommen.

    Wenn ich die TB_SETBUTTONINFO Message sende fliegt das Programm weg. Ich hab den Aufruf von Sendmessage mit TB_SETBUTTONINFO in die Schleife gepackt, ist das vllt verkehrt?

    Hast du eine Idee?

  3. Also Sendmessage war erfolgreich aber die Tooltips kamen immer noch nicht.

    Nun hab ich beim googeln was gefunden:

    Tooltip won't display over toolbar button - C Board

    NUn hab ich das versucht den Code an mein Programm anzupassen, aber erscheint über jedem Toolbutton der gleiche Tooltext (immer der erste String von meinem Textarry, in dem ich die Tooltips hinterlegt habe)

    
    for(int i =0; i < AnzahlButtons; i++)
    
    	{
    
    		if (*ToolButtonHilfsText[i] != *"")
    
    		{			
    
    			tbButton[i].iString = SendMessage((*info).handles.Toolbar, TB_ADDSTRING, 0, (LPARAM) (LPSTR) ToolButtonHilfsText[i]);
    
    		}
    
    		else tbButton[i].iString = 0;
    
    }
    
    
    DWORD ToolButtonID[AnzahlButtons] = 
    
    {
    
    	ID_FILE_NEW,
    
    	ID_FILE_MAKRO,
    
    	ID_FILE_OPEN,
    
    	ID_FILE_SAVE,
    
    	ID_EDIT_CLEAR,
    
    	0,
    
    	ID_HARDCOPY,
    
    	0,
    
    	ID_STRUKTURIERTER_TEXT,
    
    	0,
    
    	ID_EINGANG_PLUS,
    
    	ID_EINGANG_MINUS,
    
    	0,
    
    	ID_ZOOM_PLUS,
    
    	ID_ZOOM_MINUS,
    
    	0,
    
    	ID_HELP,
    
    	0
    
    };
    
    
    char* ToolButtonHilfsText[AnzahlButtons] =
    
    {
    
    	"Neues FUP-Projekt",
    
    	"Neues Makro-Projekt",
    
    	"Projekt Öffnen",
    
    	"Projekt Speichern",
    
    	"letztes eingefügtes Element löschen",
    
    	"HARDCOPY",
    
    	"",
    
    	"erzeuge Strukturierten Text",
    
    	"",
    
    	"Eingang hinzufügen",
    
    	"Eingang entfernen",
    
    	"",
    
    	"herein zoomen",
    
    	"heraus zoomen",
    
    	"",
    
    	"Hilfe",
    
    	"",
    
    	""
    
    };
    
    

    Hast du eine Idee, woran es liegt?

  4. Hallo Danke für deinen Tipp aber es funktioniert noch nicht bei mir.

    so sieht jetzt mein Quellcode aus für die Umgebung.h also wo die Toolbar erzeugt wird

    
    bool ErstelleArbeitsFenster(HWND Handle,ProgrammInformation *info)
    
    {
    
    	RECT rect;
    
    	GetClientRect(Handle,&rect);
    
    	(*info).handles.Arbeitsfenster = CreateWindow (	TEXT("Arbeitsfenster"), NULL,
    
    												WS_CHILDWINDOW | WS_VISIBLE,
    
    												0,0,
    
    												rect.right,rect.bottom,
    
    												Handle,NULL,
    
    												(*info).hInstance, NULL) ;
    
    	if ((*info).handles.Arbeitsfenster == NULL)
    
    		return FALSE;
    
    
    	// Toolbar erstellen
    
    	(*info).handles.Toolbar =	CreateToolbarEx((*info).handles.Arbeitsfenster,	// parent
    
    												WS_CHILD | WS_BORDER | 
    
    												WS_VISIBLE | TBSTYLE_TOOLTIPS,	// style
    
    												IDR_TOOLBAR,						// toolbar id
    
    												AnzahlButtons,                  // number of bitmaps
    
    												(*info).hInstance,						// mod instance
    
    												IDB_TOOLBAR,					// resource id for the bitmap
    
    												(LPCTBBUTTON)&tbButton,			// address of buttons
    
    												AnzahlButtons,                  // number of buttons
    
    												16,16,							// width & height of the buttons
    
    												16,16,							// width & height of the bitmaps
    
    												sizeof(TBBUTTON)
    
    												);	
    
    	if ((*info).handles.Toolbar == NULL)
    
    		return FALSE;
    
    
    	HWND hwndTip = CreateWindowEx(NULL, TOOLTIPS_CLASS, NULL,
    
    		WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
    
    		CW_USEDEFAULT, CW_USEDEFAULT,
    
    		CW_USEDEFAULT, CW_USEDEFAULT,
    
    		(*info).handles.Arbeitsfenster, NULL,info->hInstance,
    
    		NULL);
    
    
    	if (NULL != hwndTip)
    
    	{
    
    		Programminfo.handles.ToolTip = hwndTip;
    
    
    		SetWindowPos(hwndTip, HWND_TOPMOST, 0, 0, 0, 0, 
    
    			SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); 
    
    
    	}
    
    
    	TOOLINFO ti;
    
    	ti.cbSize = sizeof(TOOLINFO);
    
    	ti.uFlags = TTF_SUBCLASS;
    
    	ti.hwnd = info->handles.Arbeitsfenster;
    
    	ti.hinst = info->hInstance;
    
    	ti.rect.left=1;
    
    	ti.rect.top=1;
    
    	ti.rect.bottom=200;
    
    
    	//ti.rect.left = 0;
    
    	//ti.rect.top = 0;
    
    	//ti.rect.right = 100;
    
    	//ti.rect.bottom = 100;
    
    
    	for(int i =0; i < AnzahlButtons; i++)
    
    	{
    
    		int x;
    
    		if( ToolButtonHilfsText[i][0]==0) 
    
    			x=6; // Separator
    
    		else 
    
    			x=22; // normaler Button
    
    		ti.rect.right = ti.rect.left + x;
    
    		ti.lpszText = ToolButtonHilfsText[i];
    
    		SendMessage(hwndTip, TTM_ADDTOOL, 0,(LPARAM)&ti);
    
    		ti.rect.left = ti.rect.right + 1;
    
    	}
    
    
    
    	return TRUE;
    
    }
    und so schaut der Quelltext vom Hauptprogramm.h aus wo die elemente definiert werden für die Toolbar
    const int AnzahlButtons	= 18;
    
    
    #define ID_FILE_NEW                     0xE100
    
    #define ID_FILE_OPEN                    0xE101
    
    #define ID_FILE_SAVE                    0xE103
    
    #define ID_FILE_SAVE_AS                 0xE104
    
    #define ID_EDIT_CLEAR                   0xE120
    
    #define ID_HELP                         0xE146
    
    #define ID_HELP_INDEX                   0xE142
    
    
    // Die Elemente für die Toolbar
    
    TBBUTTON tbButton[] = 
    
    {
    
    {0, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    //{0, ID_FILE_NEWtb, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {16, ID_FILE_MAKRO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    //{4, ID_FILE_SAVE_AS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    //{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {3, ID_EDIT_CLEAR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {12, ID_HARDCOPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {7, ID_STRUKTURIERTER_TEXT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {9, ID_EINGANG_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {10, ID_EINGANG_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {14, ID_ZOOM_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {15, ID_ZOOM_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {11, ID_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    //{13, ID_INFO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}
    
    }; 
    
    
    char* ToolButtonHilfsText[AnzahlButtons] =
    
    {
    
    	"Neues FUP-Projekt",
    
    	"Neues Makro-Projekt",
    
    	"Projekt Öffnen",
    
    	"Projekt Speichern",
    
    	"letztes eingefügtes Element löschen",
    
    	"HARDCOPY",
    
    	"",
    
    	"erzeuge Strukturierten Text",
    
    	"",
    
    	"Eingang hinzufügen",
    
    	"Eingang entfernen",
    
    	"",
    
    	"herein zoomen",
    
    	"heraus zoomen",
    
    	"",
    
    	"Hilfe",
    
    	"",
    
    	""
    
    };

    aber leider wird immernoch kein tooltip erzeugt wenn ich mit der Maus darüber fahre. Weis einer rat?? Oder was mache ich falsch??

  5. HAllo, ich habe mal wieder ein problem.

    Ich habe eine Toolbar (siehe Bild)

    HAMTS.png

    die einzelnen elemte sind dafür in einem Bitmap gespeichert

    das Bitmap schaut so aus

    (sihe Bild) I5IDL.png

    Die einzlnen Elemente werden aus dem bitmap gelesen denn aller 15*16 Pixel entspricht ein symbol.

    diese werden in einer header datei geladen

    
    // Die Elemente für die Toolbar
    
    TBBUTTON tbButton[] = 
    
    {
    
    //{0, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {16, ID_FILE_NEWtb, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, ID_FILE_MAKRO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {1, ID_FILE_OPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {2, ID_FILE_SAVE, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    //{4, ID_FILE_SAVE_AS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    //{0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {3, ID_EDIT_CLEAR, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {12, ID_HARDCOPY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {7, ID_STRUKTURIERTER_TEXT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {9, ID_EINGANG_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {10, ID_EINGANG_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {14, ID_ZOOM_PLUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {15, ID_ZOOM_MINUS, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    {11, ID_HELP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0},
    
    {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0L, 0},
    
    //{13, ID_INFO, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0L, 0}
    
    }; 
    
    

    Die anfangs zahlen entpricht den Symbol auf den Bitmap.

    Nun meine Frage wie kann ich realiesieren das wenn ich über ein BUtton mit der Maus bin, dann sich dann pro button so ein Tooltip öffnet wo der name des Butten steht.

    Bsp. Maus ist über der dem Button OPEN das dann steht öffnen. Quasi so eine art mousovereffekt wie bei java.

    Danke im VOrraus.

  6. Ich habe ein Array von einer struct definiert und möchte in einer Funktion die Werte in dem Array bearbeiten. Wenn ich das Array normal übergebe dann werden die veränderten Daten beim Beenden der funktion nicht verändert. Also brauch ich einen Zeiger darauf, oder?

    Kann mir mal jemand ein kleines Beispiel dazu erstellen und dies ein bisschen kommentieren.

    Das ist meine Struktur:

    
    struct BausteinNummernSpeicher
    
    {
    
    	int alteBausteinNummer;
    
    	int neueBausteinNummer;
    
    };
    
    

    Dann erstelle ich eine Array:

    BausteinNummernSpeicher Array[255];

    Dieses Array würde ich nun gerne einer FUnktion übergeben, diese soll was machen und die Daten dann wieder in das Array schreiben.

    Könnt ihr mir mal erklären, wie man das macht?

  7. int alteBsNr = atoi( strstr( Hilfszeiger, ";YBYA" ) + 5 );

    ja danke habe gerade den selben tipp in einen anderen Forum bekommen.

    Kann es sein das du dort auch der freundliche Helfer warst. denn dort ist die selbe Signatur wie hier.:)

    Aber was ist wenn jetzt zb hinter YBYA eine mehrstellige zahl steht wie zb 199 wie bekomme ich die dort raus. da ja die zahl sich aus 3 stellen zusamensetzt aus der 5,6 und7 stelle.?

  8. Diese Zeile ist kompletter Blödsinn.

    • Zahl ist ein uninitialisierter Zeiger, da darfst du gar nichts reinschreiben
    • Du brauchst Zahl auch gar nicht
    • atoi gibt keinen char-Zeiger zurück. Du willst doch eine Zahl haben, oder?

    Warum suchst du nicht einfach mit strstr nach dem String, der unveränderlich vor der gesuchten Zahl steht, addierst die Länge dieses Suchstrings zu dem Ergebnis und wendest atoi darauf an? Wozu diese abenteuerlichen Verrenkungen?

    ok thx muss ih mal testen

  9. Dann benutzt du atoi falsch. Ohne den Code kann dir da niemand weiterhelfen. :rolleyes:

    so sieht mein quellcode jetzt aus

    BausteinNummernSpeicher *Zeiger;
    
    	char* Zahl;
    
    	int alteBsNr;
    
    	char Wert;
    
    	Zeiger = (BausteinNummernSpeicher *) GlobalLock(Speicher);
    
    	if (NULL == Zeiger)
    
    		return false;
    
    
    	while(((*Hilfszeiger) != ';') && ((*Hilfszeiger) != '!'))
    
    	{
    
    		(*Output) = (*Hilfszeiger);
    
    		if (isdigit(Hilfszeiger[0]))
    
    		{
    
    			Wert = Hilfszeiger[0];
    
    			strcpy(Zahl,Hilfszeiger[0]);
    
    			strcat(Zahl,"\0");
    
    			char* puffer = _atoi(Zahl);
    
    		}
    
    		Output   ++;
    
    		Hilfszeiger ++;
    
    	};
    
    	(*Output) = '\0';	
    
    	GlobalUnlock(Speicher);
    
    	return true;
    im Hilfszeiger sieht es so aus
    "0x0012f279 "1;AP2;YBYA1:bBXB12;PVO!"

  10. du kannst ja die zahlen so lange in ein array rein schreiben bis ein Zeichen halt nicht mehr ne Zahl ist und dann wandelst du dieses array in ne integer zahl im mit atoi().

    ja aber atoi geht nicht denn wenn ich nur die zahl auslesen will steht vor der zahl der Asci code im Zeiger also der wert 52 für die 4 deshalb funzt atoi nicht.

  11. Kommt drauf an wenn dein String einfach ein Char Array ist kannst mit ner Schleife drüberlaufen und prüfen ob das aktuelle Zeichen eine Zahl ist (zum beispiel mit isdigit() und das ggf. ersetzen.

    Ok, isdigit kannte ich nicht.

    Ich hab einen String und dazwischen ist eine Zahl. Bei einer Ziffer ist das mit isDigit kein Problem, was amche ich wenn die Zahl aus mehreren Ziffern besteht? Wie kriege ich diese Zahl dann in eine int Variable, weil ich damit was überprüfen will und gegebenfalls die Zahl druch einen andere ersetzen muss? :hells:

  12. So, der Fehler hat sich in Luft aufgelöst, wie auch alle anderen Speicherfehler. Ich hab mal die Trial von der VS 2005 TS geladen und den Code durch die Codeanalyse gejagt, da hat mir das VS einige NULL-Pointer Dereferenzierungen angemant. Ich hab den Zeiger erst auf ungleich NULL geprüft und dann weiter gearbeitet. Nun ist alles in Ordnung :floet:

  13. Hallo,

    ich steh gerade voll auf dem Schlauch.Wie erkenne ich in einem String Zahlen und gebe diese einzeln als Zahl zurück und die Position an der diese Zahl in dem String stand?

    Ich muss Zahlen in einem String ersetzen und komm nicht zurecht :hells: :hells:

    Hat jemand einen Denkanstoß?

  14. 14336 ist OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_CREATEPROMPT. Das widerspricht sich doch. OFN_CREATEPROMPT bedeutet, dass der Benutzer bei Angabe eines Dateinamens, der nicht existiert, bestätigen muss. OFN_FILEMUSTEXIST bedeutet, dass der Benutzer gar keine Datei angeben kann, die nicht existiert. Was willst du mit dieser Kombination erreichen?

    das ist ja das kuriose, es war als Flag nur OFN_CREATEPROMPT definert, nix anderes ;)

    Und wie außer mit GetLastError komme ich an eine gescheite Fehlermeldung?

  15. Hallo

    hier der Code

    
    strcpy(alterName,Programminfo.Datei.FileName);
    
    
    strcpy(Programminfo.Datei.FileName,"");
    
    
    			if (1 == Aufruf)
    
    			flags_Temp = DateiMenue.Flags;
    
    
    			DateiMenue.lpstrFile = Programminfo.Datei.FileName;
    
    			if (2 == Aufruf)
    
    			{
    
    				DateiMenue.Flags = flags_Temp;
    
    			}
    
    
    			// Dialog zum Ermitteln des Dateinamen aufrufen
    
    		if(!GetOpenFileName(&DateiMenue))
    
    			{
    
    				MeldeFehler(GetLastError());
    
    				MeldeFehler(CommDlgExtendedError());
    
    				strcpy(Programminfo.Datei.FileName,alterName);
    
    				return TRUE;
    
                            }
    
    			

    Diesen habe ich benutzt um die Flag des ersten GetOpenFileName in den in den 2 Aufruf des GetOpenFileName zu kopieren.

    denn wenn die Flag 8192 ist funktioniert die Funktion aber wenn die Flag 14336 ist nicht.

    Siehe Anhang.

    post-40512-14430447547142_thumb.png

    post-40512-14430447547356_thumb.png

  16. Ich hab mal wieder ein Problem. Bei einem CreateWindow-Aufruf bekomme ich folgenden Fehler:

    Durch einen Pufferüberlauf in GrafikOberfläche.exe wurde der interne Programmzustand beschädigt. Klicken Sie auf "Unterbrechen", um das Programm zu debuggen, oder auf "Weiter", um es zu beenden.

    Weitere Informationen finden Sie im Hilfethema "Gewusst wie: Debuggen von Pufferüberlaufproblemen".

    nur, das hat immer funktionert:

    
    Programminfo.handles.Menue = LoadMenu(hInstance,MenueName);
    
        hwnd = CreateWindow (szHauptAppName,                // Name der Fensterklasse
    
                      szTitle,								// Fenstertitel
    
                      WS_OVERLAPPEDWINDOW | WS_MAXIMIZE,	// Fensterstil
    
                      CW_USEDEFAULT,						// X-Position des Fensters
    
                      CW_USEDEFAULT,						// Y-Position des Fensters
    
    /*
    
                      CW_USEDEFAULT,						// Fensterbreite
    
                      CW_USEDEFAULT,						// Fensterhöhe
    
    */
    
    				  GetSystemMetrics( SM_CXSCREEN ),
    
    				  GetSystemMetrics( SM_CYSCREEN ),
    
                      NULL,									// übergeordnetes Fenster
    
                      Programminfo.handles.Menue,			// Menü
    
                      hInstance,							// Programm-Kopiezähler (Programm-ID)
    
                      NULL) ;		
    
    

    warum zur Hölle knallt das hier auf einmal?

  17. Wie du an der Fehlermeldung sehen kannst, ist das eine "First Chance Exception". Das bedeutet, dass eine Exception innerhalb eines try-Blocks aufgetreten ist, dessen catch-Teil auf die aufgetretene Exception "passt". Die Exception wird geworfen und im catch-Block behandelt. Ob ein Debugger bei so etwas anhält, ist einer Frage der Einstellungen des Debuggers. Dein lokaler Debugger ist offenbar so eingestellt, dass er bei First-Chance-Schutzverletzungen anhält, der Remote-Debugger aber nicht.

    OK, das klingt einleuchtend. Ich hab jetzt eine Idee, warum es knallt. Vor dem CreateWindow wird ja die WM_Create Message gesendet und die wird behandelt. Dort werden bestimmte Funktionen aufgerufen und das klappt wenn ich es im Remotedebugger starte oder ohne Debugger starte. Wen ich an einer anderen Stelle wieder eine der Funktioenn aufrufe die auch bei dem WM_Create aufgerufen werden knallt es

    bool TextEinfuegen(HDC *Abbhdc, HBITMAP *AbbBild, BlockSpeicherFeld *ModulDaten,ProgrammInformation *info)

    , da dort der Zeiger auf die ProgramInfo Struktur NULL ist :upps

    Nur wie bekomme ich raus, wo diese globale Variable ( :old ) auf einmal NULL wird?

    Hat dieser try-catch-Block denn an dieser Stelle wirklich einen Sinn, oder war das nur die Symptombehandlung eines Laufzeitfehlers?

    das war nur eine Symptonbehandlung :hells: :hells: :hells:

  18. Das kann man aus dem Callstack allein nicht ablesen.

    Wie dann? Bei einem Haltepunkt davor steht eigentlich überall was drin, da ist nix NULL.

    Sicher. Ist Zeile 197 der CreateWindow-Aufruf?

    nee, das ist in Zeile 201. Ich hatte einfach ein _try _except drumgemacht und Zeile 197 ist das _try.

    Warum kann es bei szAuswahlModule knallen? Das wurde mit RegisterClass registriert und sollte gehen. Und es steht ja auch was drin.

    //Edit:

    Wenn ich das Programm über den Remotedebugger debugge, dann geht alles :eek Wieso gehts da, aber beim lokalen Debugger nicht?

  19. Wenn der Fehler im Debugger auftritt, kannst du über die Aufrufliste (Callstack) prüfen, aus welchem Teil deines Codes der problematische Aufruf kam, und dort prüfen, welcher Zeiger Null ist, der nicht Null sein darf.

    Hi Klotzkopp,

    da ist keiner NULL:

    
    GrafikOberfläche.exe!erstelleAuswahlModule(ProgrammInformation info={...}, char * szAuswahlModule=0x004db0a8)  Zeile 197	C++
    
     	GrafikOberfläche.exe!ErstelleModulAuswahl(void * * AuswahlSpeicherHandle=0x004dcff4, ProgrammInformation * info=0x004dcff8)  Zeile 677 + 0x1c Bytes	C++
    
     	GrafikOberfläche.exe!ArbeitsfensterProc(HWND__ * hwnd=0x00010ef0, unsigned int message=273, unsigned int wParam=57600, long lParam=0)  Zeile 808 + 0xf Bytes	C++
    
     	user32.dll!77d18734() 	
    
     	[Unten angegebene Rahmen sind möglicherweise nicht korrekt und/oder fehlen, keine Symbole geladen für user32.dll]	
    
     	mehrere user32.dll-Aufrufe
    
     	GrafikOberfläche.exe!ArbeitsfensterProc(HWND__ * hwnd=0x9de1a96a, unsigned int message=1243932, unsigned int wParam=2010220340, long lParam=69360)  Zeile 759	C++
    
     	mehrere user32.dll-Aufrufe
    
     	GrafikOberfläche.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * szCmdLine=0x00151f1d, int iCmdShow=1)  Zeile 189	C++
    
     	GrafikOberfläche.exe!__tmainCRTStartup()  Zeile 324 + 0x35 Bytes	C
    
     	GrafikOberfläche.exe!WinMainCRTStartup()  Zeile 196	C
    
     	kernel32.dll!7c816fd7() 	
    
    
    Dass es beim Debuggen passiert und sonst nicht, legt ein Timingproblem nahe. Hantierst du mit Threads?
    nein ich nutze keine Threads.
    Wie "übergibst" du diese Struktur?
    Erst wurde sie als Zeiger übergeben, dann hatte ich es umgeändert auf einen einfachen CallByValue, kein Unterschied.
    erstelleAuswahlModule(ProgrammInformation info,TCHAR szAuswahlModule[])

    Kann es wegen dem szAuswahlModule knallen?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...