Zum Inhalt springen

VC++ externe Datenklasse mit Dialogen


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...