Objekt aus einem Dialog(Klasse) in den anderen Dialog(Klasse) übergeben



  • Hallo,

    habe versucht aus der einen Klasse ein Objekt an den Konstruktor einer anderen klasse zu übergeben, jedoch scheitert irgendwie das Ganze und ich weiss nicht warum...
    hier ist nochmal der Code

    Konstruktor

    CUserMatch::CUserMatch(ISaGsaRpConnection mRpConnection, CWnd* pParent)
    	: CDialog(CUserMatch::IDD, pParent)
    {
    
    	//{{AFX_DATA_INIT(CUserMatch)
    	m_MFilePath = _T("");
    	RpConnection = mRpConnection; //<------------darf man sowas überhaupt?
    	//}}AFX_DATA_INIT
    }
    

    Aufruf des Konstruktors und des Dialogfensters

    void CUserDlg::OnMatchUser() 
    {
             ISaGsaRpConnection RpConnection;
             ...
             ...
             ...
    	CUserMatch mDlg = new CUserMatch(RpConnection, NULL);
    	mDlg.DoModal();
    }
    

    Hat jemand einen guten Rat für mich?

    Gruss,

    chullain



  • chullain schrieb:

    Hallo,

    void CUserDlg::OnMatchUser() 
    {
    ...
    	CUserMatch mDlg = new CUserMatch(RpConnection, this);
    	mDlg.DoModal();
    }
    

    this statt NULL. Der Zeiger ist nicht umsonst vom typ CWnd* ... 😉

    Devil



  • Das habe ich jetzt soweit gemacht, trotzdem wird das Objekt nicht richtig übergeben und das Programm bricht ab, sobald ich in der erzeugten Klasse mit dem übergebenen Objekt arbeiten möchte. Mit der Debuger-Funtion konnte ich herausfinden, dass verscheidene Speicheradressen an das Objekt übergeben werden, zuerst wird eine richtige übergeben, dann später erscheint da eine völlig falsche Speicheradresse...vielleicht kann ich das anhand von Stückchen Code etwas deutlicher machen...

    der Aufruf des Dialogfensters aus der ersten Klasse

    void CUserDlg::OnMatchUser() 
    {
    	CUserMatch mDlg = new CUserMatch(*users, this);
    	mDlg.DoModal();
    }
    

    ...dann übergibt der Konstruktor des erzeugten Objektes die Variable von Typ SAFEARRAY an die "klasseninterne" Variable

    CUserMatch::CUserMatch(SAFEARRAY mUsers, CWnd* pParent)
    	: CDialog(CUserMatch::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CUserMatch)
    	m_MFilePath = _T("");
    	users = &mUsers;
    	//}}AFX_DATA_INIT
    }
    

    ...als nächstes versuche ich in der erstellten Klasse nach einem Button-Druck auf das übergebene Objekt zuzugreifen und da bricht er ab...

    void CUserMatch::OnMatch() 
    {
    
    		/*Get all users.
    		avobjUsers = RpTransaction.GetObjectsOfType("Principal");
    		users = avobjUsers.parray;
    		*/
    
    		//Check the Dimension of the Array
    		if ( SafeArrayGetDim(users) != 1 )//hier erfolgt der Abbruch
    		AfxMessageBox(E_INVALIDARG); 
    ...
    ...
    ...
    

    Die Fehlermeldung heisst dann in etwa: Die Anweisung in ".........." verweist auf den Speicher"......". Der Vorgang "read" konnte nicht ausgeführt werden.

    Was könnte da der Fehler sein? Kann mir bitte eienr helfen?


Anmelden zum Antworten