Шаг 303 - Свои классы в DLL для MFC

MFC поддерживает DLL расширение. В эту DLL можно поместить свои классы производные от классов MFC, но использовать такую DLL могут только приложения MFC. Зато они могут свободно передавать и получать объекты классов. Итак, давайте создадим DLL, в которой будет класс диалога. Наш класс, но порожденный от CDiаlog. Запускаем VC и выбираем в проекте MCF AppWizard Dll.

303_1.gif (4871 b)

На первом шаге нужно указать, что это DLL расширения.

303_2.gif (5769 b)

Добавляем новый класс в наш проект, как наследника CDiаlog:

303_3.gif (3454 b)

Добавляем ссылку на него в проект.

// TestMyClass.cpp : Defines the initialization routines for the DLL.
//
#include "stdafx.h"
#include <afxdllx.h>
#include "TestDialog.h"

Теперь немного поменяем конструктор. Дело в том, что сейчас нужно указать идентификатор диалоговой панели. Но мы то его пока не знаем.

В описании:

class AFX_EXT_CLASS CTestDialog : public CDialog
{
// Construction
public:
CTestDialog(CWnd* pParent,UINT nIDD); // standard constructor
// Dialog Data
//{{AFX_DATA(CTestDialog)
//
......
};

В реализации:

////////////////////////////////////////////////
// CTestDialog dialog

CTestDialog::CTestDialog(CWnd* pParent,UINT nIDD)
: CDialog(nIDD, pParent)
{
//{{AFX_DATA_INIT(CTestDialog)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}

Обратите внимание, что к классу добавлен модификатор:

......
class AFX_EXT_CLASS CTestDialog : public CDialog
......

AFX_EXT_CLASS говорит, что класс экспортируемый. Скомпилировав проект Вы можете увидеть, что в папке Debug находятся два нужных нам файла:

TestMyClass.dll Сама DLL
TestMyClass.lib Библиотека компоновки

Попробуем использовать наш класс ??? Для этого нужно сделать TestDialog.h и TestMyClass.lib в соотвествующей папочке VC, а DLL поместить в Widows\system.

H 	- Program Files\Microsoft Visual Studio\VC98\Include
Lib 	- Program Files\Microsoft Visual Studio\VC98\Lib

Давайте попробуем создать простое приложение на базе диалогового окна. На него поместим кнопку и подключим наш класс:

// TestDlgDlg.cpp : implementation file
//

#include "stdafx.h"
#include "TestDlg.h"
#include "TestDlgDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#pragma comment(lib,"TestMyClass.lib")
#include "TestDialog.h"

......

Создадим в ресурсах простое диалоговое окно с идентификатором IDD_DIALOG_TEST и испытаем наш класс.

void CTestDlgDlg::OnButton1() 
{
	CTestDialog ct(this,IDD_DIALOG_TEST);
	ct.DoModal();
}

Все сработает. Попробуйте сами.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.