Sign in to follow this  

Calling a form in an MFC DLL

This topic is 3715 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

So I have an old EXE that I have basically "Shared" into a DLL for this application ( The same code has to exist in the EXE as the dll ). I'm trying to call up a new Form from the DLL inside the main EXE for our new project, but it hasn't exactly gone well.. I'm currently using VS 2003, C++, and this is an MFC project. I currently have the following form ( Much snipped out. It reallyl is basic ) Header:
#include "Resource.h"
// frmEPTReportBuilder dialog

class frmEPTReportBuilder : public CDialog
{
	DECLARE_DYNAMIC(frmEPTReportBuilder)
public:
	frmEPTReportBuilder(CWnd* pParent = NULL);   // standard constructor
	virtual ~frmEPTReportBuilder();
// Dialog Data
	enum { IDD = IDD_DLGEPTRPTBLDG };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedOk();
	afx_msg void OnBnClickedCancel();
};


Body:
#include "stdafx.h"
#include "frmEPTReportBuilder.h"


// frmEPTReportBuilder dialog

IMPLEMENT_DYNAMIC(frmEPTReportBuilder, CDialog)
frmEPTReportBuilder::frmEPTReportBuilder(CWnd* pParent /*=NULL*/)
	: CDialog(IDD_DLGEPTRPTBLDG, pParent)
{
}

frmEPTReportBuilder::~frmEPTReportBuilder()
{
}
BEGIN_MESSAGE_MAP(frmEPTReportBuilder, CDialog)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_BN_CLICKED(IDCANCEL, OnBnClickedCancel)
END_MESSAGE_MAP()

void frmEPTReportBuilder::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
}
void frmEPTReportBuilder::OnBnClickedOk()
{
	OnOK();
}
void frmEPTReportBuilder::OnBnClickedCancel()
{
   OnCancel();
}

Nothing special here. Note the "CDialog(IDD_DLGEPTRPTBLDG" for calling the base constructor. I did have the default "frmEPTReportBuilder::IDD" in here, and it doesn't make a differance either way. So I have made a single class that has a static function that takes a window handle, and calls the frmEPTReportBuilder constructor, setting the CWnd* as the parent to the form, and calling DoModal(). Here it is... Header:
#pragma once

#ifdef _EPT_EXPORTS
#define EPTREPORTBUILDER__API __declspec(dllexport)
#else
#define EPTREPORTBUILDER__API __declspec(dllimport)
#endif

class EPTREPORTBUILDER__API CEPTReportBuilder
{
public:
	static void SpawnReportBuilderForm ( CWnd * parent );

Body:
#include "StdAfx.h"
#include "EPTReportBuilder.h"
#include "frmEPTReportBuilder.h"
void CEPTReportBuilder::SpawnReportBuilderForm ( CWnd * parent )
{
	frmEPTReportBuilder dlg;
	dlg.SetParent ( parent );
	//Set some things

	int iResult = dlg.DoModal();
	if( IDOK == iResult )
	{
	}

	CString sTemp = "";
}

I have a menu item in the main program that simply calls CEPTReportBuilder::SpawnReportBuilderForm ( this ) { this being the MainFrame class in the MDI }. When dlg.SetParent gets called, it errors out ( Debug Assertion Failed ), but I cannot get to the code where this happens ( atlmfc\include\afxwin2.inl, line 284 ). If I take out setting the parent, the next line will always return a -1, and the form will never show. This I can step into ( dlgCore.cpp ). Basically, in the DoModal Dialog is a line ( 501 ) that says " if (lpDialogTemplate == NULL) return -1; ". My only real guess here is that I can't find the correct Resources in the DLL from the main EXE. This is my first real stab at creating a DLL inside MFC. I've been at the problem for a week, and I have too much else to get done to stay stuck.. Thanks for any help

Share this post


Link to post
Share on other sites

This topic is 3715 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this