Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

VC++ externe Datenklasse mit Dialogen

Empfohlene Antworten

Veröffentlicht

Hallo nochmal,

ich habe noch mal ein ähnliches Problem, wie bei meinem PropertySheet-Thread. Ich habe einen Hauptdialog, der 2 andere Dialoge aufruft. Da zwischen den Dialogen ein Datenaustausch stattfinden soll, möchte ich wieder über eine externe Datenklasse gehen.

Ich habe alles so erstellt wie bei meinem PropertySheetprogramm und der Compiler gibt keinen Fehler. Wenn ich jedoch das Programm starte, sagt er mir sobald ich auf die Datenklasse zugreifen möchte: Zugriffsverletzung-Leseposition!

Mein Code:

Programm2.h


#include "resource.h"		// Hauptsymbole

#include "Daten.h"

...

CDaten *pDaten, mDaten;

Programm2.cpp

#include "stdafx.h"

#include "Programm2.h"

#include "Dialog1.h"   

#include "Dialog3.h" 

#include "Programm2Dlg.h"

...


CDialog1 D1;

CDialog3 D3;

CProgramm2Dlg HD;


pDaten=&mDaten;


D1.pDaten=&mDaten;

D3.pDaten=&mDaten;

HD.pDaten=&mDaten;

als Beispiel: Programm2Dlg.h

#pragma once

#include "afxwin.h"

#include "afxtempl.h"

...

CDaten *pDaten;

Programm2Dlg.cpp

#include "stdafx.h"

#include "Programm2.h"

#include "Dialog1.h"   // Da der Hauptdialog, Dialog1 und Dialog3 modal aufruft

#include "Dialog3.h"   //  stehen sie vor dem Hauptdialog 

#include "Programm2Dlg.h"

#include ".\programm2dlg.h"

Wenn ich mir den Programmablauf im Debugger anschaue, sehe ich, dass er bei der Adressenzuweisung in Programm2.cpp (HD.pDaten=&mDaten) immer dieselbe Adresse vergibt, wenn ich jedoch in der Klasse von der Variablen HD bin, dann hat der Pointer "pDaten" die Adresse nicht übernommen und zeigt an, ihm wäre keine Adresse zugewiesen worden. Ich schicke also im Programm2.cpp dieselbe Adresse an alle Pointer und diese zeigen sie mir dort auch an. Aber in den Klassen selbst ist sie nicht mehr da.

Ich habe zwar den Code von meinem Propertysheetprogramm vorliegen, finde aber keinen Fehler.

Weiss jemand woran das liegen könnte?

Gruß

KK

Hallo Klotzkopp,

gibt es irgendein Hilfstool, dass mir bei meiner Suche helfen kann? Die Instanzen mit denen ich arbeite, erstelle ich eigentlich nur einmal. Wenn dies so wäre, müsste das Programm jedoch die Adresse weitergeben und einwandfrei laufen, das sehe ich schon ein. Ich habe nur keine Ahnung wie ich jetzt weiter vorgehen soll. Ich habe in jeder Klasse einen Pointer zu CDaten erstellt.

Ich finde halt auch keinen Unterschied zu meinem PropertySheet-Programm.

Kann man sich in einem Hilfstool anzeigen lassen, wann das Programm etwas erstellt, um zu sehen wann er die anderen Instanzen erzeugt?

Und ja, den globalen Zeiger habe ich nur erstellt um zu sehen ob das mit derselben Adresse passt. Muss zwar logisch so sein, aber zur Zeit ist Kontrolle für mich noch besser :)

Mit Dank und Gruß

KK

Wenn der Zeiger in einer Instanz von CProgramm2Dlg nicht passt, dann benutzt du wohl irgendwo nicht HD, sondern erstellst noch ein Objekt. Ich tippe auf die InitInstance-Methode der App-Klasse. Du könntest natürlich einfach mal nach "CProgramm2Dlg " suchen (ohne Anführungszeichen, aber mit dem Leerzeichen am Ende).

Hallo Klotzkopp,

mann, jetzt habe ich Idiot verstanden, was Du mir mitteilen wolltest. Da ich pDaten über HD zugewiesen habe, dann aber in Programm2.cpp den Dialog mit einer anderen Variable über DoModal aufgerufen habe, hat er natürlich nicht mehr die Adresse der Zuweisung, da es sich ja um eine ganz andere Variable handelt.

Jetzt sehe ich im Debugger auch, dass der Pointer dieselbe Adresse hat.

Dank Dir.

Gruß

KK

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.