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