Einsteiger-Frage: Probleme mit Variablen - Instanzierung



  • Hallo,

    Habe ein relativ simples Problem:

    Ich habe 2 Dialogfenster. Das Ergebnis des einen Fensters bräuchte ich in dem andern.

    habe folgendes probiert:
    CConnect_to_Server connect;
    MessageBox(connect.m_kryptkey);

    daraus folgt:
    error C2039: 'm_kryptkey' : is not a member of 'CConnect_to_Server'
    ...\Connect_to_Server.h(13) : see declaration of 'CConnect_to_Server'

    Werde nur irgendwie nicht so recht schlau draus...
    einen #include connect_to_server.h hab ich.

    Danke im voraus.

    mfg
    trequ



  • Naja, ich vermute mal Folgendes:

    m_kryptkey ist in der Klasse CConnect_to_Server nicht deklariert, oder zumindest nur lokal in einer Schleife oder so.



  • Hallo,

    Richtig, da war der Wurm drin.
    m_kryptkey ist jetzt in Connect_to_Server public und hat da auch einen Wert.
    Jetzt kriege ich zwar beim Starten keinen Fehler mehr, aber wenn ich dann folgendes mache:

    CConnect_to_Server connect; 
    MessageBox(connect.m_kryptkey);
    

    bleibt die Dialogbox leer.
    ich nehme mal an dass nach der übergabe kein Wert mehr da ist... nur: Wieso?

    mfg
    trequ



  • Ist CConnect_to_server ein Dialogfeld ?



  • Ja, warum?



  • trequ schrieb:

    Hallo,

    CConnect_to_Server connect;
    MessageBox(connect.m_kryptkey);[/cpp]

    bleibt die Dialogbox leer.
    ich nehme mal an dass nach der übergabe kein Wert mehr da ist... nur: Wieso?

    trequ

    was erwartest Du denn Bitte?
    aus Deinem Codesnippet kann ich nur ableiten, daß du die Klasse
    CConnect_to_Server instanziert hast und Dir über eine MessageBox den
    Wert eines members dieser klasse(m_mkryptkey) anzeigen läßt.

    Woher sollen die Leute hier wissen, was in deinem Konstruktor steht, oder was Du hier vorhast?

    epidemic



  • Weil ich aus deinem Code entnehme, dass das Dialogfeld gar nicht aufgerufen wird. 😉



  • Hi,

    also hier noch mal der ganze Code:

    Datei Connect_to_Server.h

    #if !defined(AFX_CONNECT_TO_SERVER_H__06F55074_FB66_4F47_92A2_C406604402D0__INCLUDED_)
    #define AFX_CONNECT_TO_SERVER_H__06F55074_FB66_4F47_92A2_C406604402D0__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // Connect_to_Server.h : header file
    //
    
    /////////////////////////////////////////////////////////////////////////////
    // CConnect_to_Server dialog
    
    class CConnect_to_Server : public CDialog
    {
    // Construction
    public:
    	CConnect_to_Server(CWnd* pParent = NULL);   // standard constructor
    // Dialog Data
    	//{{AFX_DATA(CConnect_to_Server)
    	enum { IDD = IDD_CONNECT_TO_SERVER };
    	CProgressCtrl	m_connect_progress;
    	CString	m_connectstatus;
    	CString m_kryptkey;
    	//}}AFX_DATA
    
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CConnect_to_Server)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    	//}}AFX_VIRTUAL
    
    // Implementation
    protected:
    
    	// Generated message map functions
    	//{{AFX_MSG(CConnect_to_Server)
    	virtual void OnCancel();
    	afx_msg void OnTimer(UINT nIDEvent);
    	virtual BOOL OnInitDialog();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_CONNECT_TO_SERVER_H__06F55074_FB66_4F47_92A2_C406604402D0__INCLUDED_)
    

    Datei Connect_to_Server.cpp

    // Connect_to_Server.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "SecMail.h"
    #include "iostream.h" 
    #include "fstream.h"
    #include "MakeServerLogin.h"
    #include "Connect_to_Server.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    #define IDT_TIMER1 1
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // CConnect_to_Server dialog
    
    CConnect_to_Server::CConnect_to_Server(CWnd* pParent /*=NULL*/)
    	: CDialog(CConnect_to_Server::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CConnect_to_Server)
    	m_connectstatus = _T("");
    	//}}AFX_DATA_INIT
    	m_connect_progress.SetRange(0,100);
    }	
    
    void CConnect_to_Server::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CConnect_to_Server)
    	DDX_Control(pDX, IDC_CONNECT_PROGRESS, m_connect_progress);
    	DDX_Text(pDX, IDC_CONNECT_STATUS, m_connectstatus);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CConnect_to_Server, CDialog)
    	//{{AFX_MSG_MAP(CConnect_to_Server)
    	ON_WM_TIMER()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CConnect_to_Server message handlers
    
    void CConnect_to_Server::OnCancel() 
    {
    	CDialog::OnCancel();
    }
    
    void CConnect_to_Server::OnTimer(UINT nIDEvent)   
    {  
    	KillTimer(nIDEvent);
    
    	//Timer beendet, Anmeldung eingeleitet
    	//Statusausgabe
    	m_connectstatus = "Verbindung wird hergestellt...";
    	m_connect_progress.OffsetPos(20);
    	UpdateData(false);
    
    	//Socket-Datei wird entfernt
    	remove("comm.sock");  
    
    	//Setze Sanduhr...
    	CWaitCursor WCursor;
    
    	//Perl-Prozess wird eingeleitet
    
            //..............................................
            //....... Code, der eigentlich nix zur Sache tut
    
    	//For testing purposes only
    	m_kryptkey="12345678";
    
            //Connection to Server OK, LOGIN...
    	MakeServerLogin dlgMakeServerLogin;
             dlgMakeServerLogin.DoModal();	
    
    	CDialog::OnCancel();        
    }
    
    BOOL CConnect_to_Server::OnInitDialog() 
    {	
    	SetTimer(IDT_TIMER1, 20, NULL);
    
    	CDialog::OnInitDialog();
    
    	return TRUE;
    }
    

    Datei MakeServerLogin.h:

    if !defined(AFX_MAKESERVERLOGIN_H__2767EF91_877D_4DC9_A6C9_D6540589F1AA__INCLUDED_)
    #define AFX_MAKESERVERLOGIN_H__2767EF91_877D_4DC9_A6C9_D6540589F1AA__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    // MakeServerLogin.h : header file
    //
    
    /////////////////////////////////////////////////////////////////////////////
    // MakeServerLogin dialog
    
    class MakeServerLogin : public CDialog
    {
    // Construction
    public:
    	MakeServerLogin(CWnd* pParent = NULL);   // standard constructor
    // Dialog Data
    	//{{AFX_DATA(MakeServerLogin)
    	enum { IDD = IDD_MAKE_SERVER_LOGIN };
    	CProgressCtrl	m_connect_progress;
    	CString	m_connectstatus;
    	CString	m_user;
    	CString	m_pass;
    	BOOL	m_save_login_data;
    	//}}AFX_DATA
    
    // Overrides
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(MakeServerLogin)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    	//}}AFX_VIRTUAL
    
    // Implementation
    protected:
    
    	// Generated message map functions
    	//{{AFX_MSG(MakeServerLogin)
    	virtual BOOL OnInitDialog();
    	afx_msg void OnTimer(UINT nIDEvent);
    	virtual void OnOK();
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    
    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
    
    #endif // !defined(AFX_MAKESERVERLOGIN_H__2767EF91_877D_4DC9_A6C9_D6540589F1AA__INCLUDED_)
    

    Datei MakeServerLogin.cpp:

    // MakeServerLogin.cpp : implementation file
    //
    
    #include "stdafx.h"
    #include "SecMail.h"
    #include "MakeServerLogin.h"
    #include "Connect_to_Server.h"
    #include "iostream.h"
    #include "fstream.h"
    
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif
    
    /////////////////////////////////////////////////////////////////////////////
    // MakeServerLogin dialog
    
    MakeServerLogin::MakeServerLogin(CWnd* pParent /*=NULL*/)
    	: CDialog(MakeServerLogin::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(MakeServerLogin)
    	m_connectstatus = _T("");
    	m_user = _T("");
    	m_pass = _T("");
    	m_save_login_data = TRUE;
    	//}}AFX_DATA_INIT
    	m_connect_progress.SetRange(0,100);
    }
    
    void MakeServerLogin::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(MakeServerLogin)
    	DDX_Control(pDX, IDC_CONNECT_PROGRESS, m_connect_progress);
    	DDX_Text(pDX, IDC_CONNECT_STATUS, m_connectstatus);
    	DDX_Text(pDX, IDC_USERNAME, m_user);
    	DDX_Text(pDX, IDC_PASSWORD, m_pass);
    	DDX_Check(pDX, IDC_SAVE_LOGIN_DATA, m_save_login_data);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(MakeServerLogin, CDialog)
    	//{{AFX_MSG_MAP(MakeServerLogin)
    	ON_WM_TIMER()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // MakeServerLogin message handlers
    
    BOOL MakeServerLogin::OnInitDialog() 
    {
    	SetTimer(IDT_TIMER1, 10, NULL);
    
    	CDialog::OnInitDialog();
    
    	return TRUE;
    }
    
    void MakeServerLogin::OnTimer(UINT nIDEvent) 
    {
    	KillTimer(nIDEvent);
    
    	//.....................
    	//Code, der eigentlich nix zur Sache tut.
    
    	CConnect_to_Server connect; 
    	MessageBox(connect.m_kryptkey); 
    
    	CDialog::OnTimer(nIDEvent);
    }
    
    void MakeServerLogin::OnOK() 
    {	
    	//.....................
    	//Code, der eigentlich nix zur Sache tut.
    
    	CDialog::OnOK();
    }
    

    Also wenn ich mich nicht irre, wird das Dialogfeld aufgerufen oder?

    mfg
    trequ



  • CConnect_to_Server connect;
    if(connect.DoModal() == IDOK)
      MessageBox(connect.m_kryptkey);
    

    DoModal zeigt das Dialogfeld modal an: Das heißt, dass das neue Dialogfeld aktiv ist und im alten Feld solange die Programmsteuerung gestoppt wird, bis das neue wieder verschwindet. Hat der user das neue Dialogfeld über OK verlassen (nicht über Abbrechen oder so), kommt die MessageBox.

    Allgemein: Wenn du das zweite Dialogfeld durch OnOK(); verlässt, wird IDOK zurückgegeben, wenn du es durch OnCancel(); beendest, wird IDCANCEL zurückgegeben - so lässt sich vom ersten Dialogfeld aus prüfen, wie der Benutzer reagiert hat.



  • Hallo,

    verstehe ich nicht so ganz.
    Das Problem ist folgendes:
    1. m_kryptkey hat einen Wert. (hab zum test 12345678 genommen)
    2. Das neue Dialogfeld wird aufgebaut.
    3. Jetzt will ich im neuen Dialogfeld den Wert von m_kryptkey haben, um ihn weiter zu verarbeiten. Im alten Dialogfeld hat er den Wert, in neuen ist er NULL.

    Warum?

    mfg
    trequ


Anmelden zum Antworten