win32 console application using MFC

Discussion in 'MFC' started by chaitanya.vemasani, Nov 12, 2008.

  1. chaitanya.vemasani

    chaitanya.vemasani New Member

    Joined:
    Nov 12, 2008
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Hi,
    i m new to vc++. I have two different applications. once is MFC application and the other is win32 console application. i want to get the data from MFC application to win32 console application. can anyone explain me how to integrate an MFC application with win32 console application.

    Thanks in Advance
     
  2. imported_xpi0t0s

    imported_xpi0t0s New Member

    Joined:
    Jul 18, 2008
    Messages:
    101
    Likes Received:
    0
    Trophy Points:
    0
    There are various forms of interprocess communication available in Win32, all of it is available for console programs; you just have to #include <windows.h> and any other relevant headers, then you can call the functions. There are DDE, OLE, messaging (Send/PostMessage), pipes and probably others too.

    This of course assumes you have the source to each program and can modify them accordingly. If not then it's a lot harder; you can use a technique called "screen scraping" where you look at what the application displays and work out what data underlies that information.
     
  3. chaitanya.vemasani

    chaitanya.vemasani New Member

    Joined:
    Nov 12, 2008
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Hi xpi0t0s,
    Thanks for your reply.

    How to link Win32 console application with MFC applications (both are two different executables). if you have any example code for this please post.

    Thanks in Advance
     
  4. imported_xpi0t0s

    imported_xpi0t0s New Member

    Joined:
    Jul 18, 2008
    Messages:
    101
    Likes Received:
    0
    Trophy Points:
    0
    Do you have the source code for both programs?
     
  5. chaitanya.vemasani

    chaitanya.vemasani New Member

    Joined:
    Nov 12, 2008
    Messages:
    3
    Likes Received:
    0
    Trophy Points:
    0
    Please find the code below
    Code:
    class CAboutDlg : public CDialog
    {
    public:
    	CAboutDlg();
    
    // Dialog Data
    	//{{AFX_DATA(CAboutDlg)
    	enum { IDD = IDD_ABOUTBOX };
    	//}}AFX_DATA
    
    	// ClassWizard generated virtual function overrides
    	//{{AFX_VIRTUAL(CAboutDlg)
    	protected:
    	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    	//}}AFX_VIRTUAL
    
    // Implementation
    protected:
    	//{{AFX_MSG(CAboutDlg)
    	//}}AFX_MSG
    	DECLARE_MESSAGE_MAP()
    };
    
    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    	//{{AFX_DATA_INIT(CAboutDlg)
    	//}}AFX_DATA_INIT
    }
    
    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CAboutDlg)
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    	//{{AFX_MSG_MAP(CAboutDlg)
    		// No message handlers
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CSimpleMFCDlg dialog
    
    CSimpleMFCDlg::CSimpleMFCDlg(CWnd* pParent /*=NULL*/)
    	: CDialog(CSimpleMFCDlg::IDD, pParent)
    {
    	//{{AFX_DATA_INIT(CSimpleMFCDlg)
    	m_strName = _T("");
    	//}}AFX_DATA_INIT
    	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
    	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }
    
    void CSimpleMFCDlg::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CSimpleMFCDlg)
    	DDX_Control(pDX, IDC_ESTRNAME, m_cestrName);
    	DDX_Text(pDX, IDC_ESTRNAME, m_strName);
    	//}}AFX_DATA_MAP
    }
    
    BEGIN_MESSAGE_MAP(CSimpleMFCDlg, CDialog)
    	//{{AFX_MSG_MAP(CSimpleMFCDlg)
    	ON_WM_SYSCOMMAND()
    	ON_WM_PAINT()
    	ON_WM_QUERYDRAGICON()
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // CSimpleMFCDlg message handlers
    
    BOOL CSimpleMFCDlg::OnInitDialog()
    {
    	CDialog::OnInitDialog();
    
    	// Add "About..." menu item to system menu.
    
    	// IDM_ABOUTBOX must be in the system command range.
    	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    	ASSERT(IDM_ABOUTBOX < 0xF000);
    
    	CMenu* pSysMenu = GetSystemMenu(FALSE);
    	if (pSysMenu != NULL)
    	{
    		CString strAboutMenu;
    		strAboutMenu.LoadString(IDS_ABOUTBOX);
    		if (!strAboutMenu.IsEmpty())
    		{
    			pSysMenu->AppendMenu(MF_SEPARATOR);
    			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
    		}
    	}
    
    	// Set the icon for this dialog.  The framework does this automatically
    	//  when the application's main window is not a dialog
    	SetIcon(m_hIcon, TRUE);			// Set big icon
    	SetIcon(m_hIcon, FALSE);		// Set small icon
    	
    	// TODO: Add extra initialization here
    	
    	return TRUE;  // return TRUE  unless you set the focus to a control
    }
    
    void CSimpleMFCDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    	{
    		CAboutDlg dlgAbout;
    		dlgAbout.DoModal();
    	}
    	else
    	{
    		CDialog::OnSysCommand(nID, lParam);
    	}
    }
    
    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.
    
    void CSimpleMFCDlg::OnPaint() 
    {
    	if (IsIconic())
    	{
    		CPaintDC dc(this); // device context for painting
    
    		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
    
    		// Center icon in client rectangle
    		int cxIcon = GetSystemMetrics(SM_CXICON);
    		int cyIcon = GetSystemMetrics(SM_CYICON);
    		CRect rect;
    		GetClientRect(&rect);
    		int x = (rect.Width() - cxIcon + 1) / 2;
    		int y = (rect.Height() - cyIcon + 1) / 2;
    
    		// Draw the icon
    		dc.DrawIcon(x, y, m_hIcon);
    	}
    	else
    	{
    		CDialog::OnPaint();
    	}
    }
    
    // The system calls this to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CSimpleMFCDlg::OnQueryDragIcon()
    {
    	return (HCURSOR) m_hIcon;
    }
    
    void CSimpleMFCDlg::OnOK() 
    {
    	   STARTUPINFO si;
    	   PROCESS_INFORMATION pi;
    	   	
    	   BOOL bStatus;
    
    	   memset( &si, 0, sizeof(STARTUPINFO) );             //  Initialize structures
    	   memset( &pi, 0, sizeof(PROCESS_INFORMATION) );
    
    	   si.cb = sizeof(STARTUPINFO);
    	   si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
    	   si.wShowWindow = SW_HIDE;        //  Don't show the console window (DOS box)
    
    	// TODO: Add extra validation here
    	
    //	CDialog::OnOK();
    	m_cestrName.GetWindowText(m_strName);
    
    	bStatus = CreateProcess( NULL, "..\\Console\\Debug\\Console.exe", NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi );
    }
    Console.exe is a win32 console application. i m able to create a process and it is successfully running but i dont know how to send the data to the console application.

    Please help me. i m deadly need of this.

    Thanks in Advance.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice