Шаг 313 - Константа _AFXDLL

Данная константа позволяет Вам определить как компонуется MFC DLL статически или динамически. Давайте установим статическую компоновку.

313_1.gif (1052 b)

И запустим нашу программу:

// atest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "afxwin.h"
#include "iostream.h"

void main()
{
#if defined _AFXDLL 
cout << "dinamic" << endl;
#else
cout << "static" << endl;
#endif
}

Результат будет таким:

static
Press any key to continue

Переключимся на dinamic:

313_2.gif (1006 b)

И запустим опять:

dinamic
Press any key to continue

Вы спросите есть ли разница для программиста. Есть как ни странно. Вот такой код можно увидеть в DLL:

#ifndef _AFXDLL 
	AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
#endif

При создании DLL просто или расширений MFC необходимо по разному строить программный код. Но и в EXE при инициализации, допустим библиотеки CTL3D32.DLL, она разная в зависимости от того, как используется MFC:

#ifdef _AFXDLL 
	Enable3dControls( ); 
#else 
	Enable3dControlsStatic( );
#endif

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