Sdílet prostřednictvím


Běžné knihovny MFC DLL staticky propojené do MFC

Běžná knihovna MFC DLL staticky propojená s knihovnou MFC je knihovna DLL, která interně používá knihovnu MFC a exportované funkce v knihovně DLL lze volat buď spustitelnými soubory MFC, nebo jinými spustitelnými soubory než MFC. Jak název popisuje, tento druh knihovny DLL je sestaven pomocí verze knihovny statických propojení mfc. Funkce se obvykle exportují z běžné knihovny MFC DLL pomocí standardního rozhraní jazyka C. Příklad zápisu, sestavení a použití běžné knihovny MFC DLL naleznete v ukázkové knihovně DLLScreenCap.

Všimněte si, že termín USRDLL se už nepoužívá v dokumentaci visual C++. Běžná knihovna MFC DLL, která je staticky propojená s knihovnou MFC, má stejné vlastnosti jako bývalá knihovna USRDLL.

Běžná knihovna MFC DLL, staticky propojená s knihovnou MFC, má následující funkce:

  • Spustitelný soubor klienta lze napsat v libovolném jazyce, který podporuje použití knihoven DLL (C, C++, Pascal, Visual Basic atd.); nemusí to být aplikace MFC.

  • Knihovna DLL může propojit stejné knihovny statických propojení MFC, které používají aplikace. Pro knihovny DLL již neexistuje samostatná verze statických knihoven odkazů.

  • Před verzí 4.0 knihovny MFC poskytovaly knihovny USRDL Stejné typy funkcí jako běžné knihovny MFC DLL staticky propojené s knihovnou MFC. Od verze Visual C++ 4.0 je termín USRDLL zastaralý.

Běžná knihovna MFC DLL, staticky propojená s knihovnou MFC, má následující požadavky:

  • Tento typ knihovny DLL musí vytvořit instanci třídy odvozené z CWinApp.

  • Tento typ knihovny DLL používá knihovnu DllMain MFC. Umístěte veškerý inicializační kód specifický pro knihovnu InitInstance DLL do členské funkce a ukončovací kód ExitInstance jako v normální aplikaci MFC.

  • I když je termín USRDLL zastaralý, musíte na příkazovém řádku kompilátoru definovat "_USRDLL". Tato definice určuje, které deklarace se načte ze souborů hlaviček MFC.

běžné knihovny MFC DLL musí mít -odvozenou CWinApptřídu a jeden objekt této třídy aplikace, stejně jako aplikace MFC. CWinApp Objekt knihovny DLL však nemá hlavní čerpadlo zpráv, stejně jako CWinApp objekt aplikace.

Všimněte si, že CWinApp::Run mechanismus se nevztahuje na knihovnu DLL, protože aplikace vlastní hlavní čerpadlo zpráv. Pokud knihovna DLL otevře bezmodální dialogy nebo má vlastní okno hlavního rámce, hlavní zpráva pumpa aplikace musí volat rutinu exportovanou knihovnou DLL, která následně volá CWinApp::PreTranslateMessage členskou funkci objektu aplikace knihovny DLL.

Příklad této funkce naleznete v ukázce DLLScreenCap.

Symboly se obvykle exportují z běžné knihovny MFC DLL pomocí standardního rozhraní jazyka C. Deklarace funkce exportované z běžné knihovny MFC DLL by vypadala přibližně takto:

extern "C" __declspec(dllexport) MyExportedFunction( );

Všechny přidělení paměti v rámci běžné knihovny MFC DLL by měly zůstat v knihovně DLL; knihovna DLL by neměla předávat ani přijímat z volajícího spustitelného souboru žádnou z následujících možností:

  • Ukazatele na objekty MFC

  • Ukazatele na paměť přidělenou knihovnou MFC

Pokud potřebujete provést některou z výše uvedených nebo potřebujete předat odvozené objekty MFC mezi volající spustitelný soubor a knihovnou DLL, je nutné sestavit knihovnu DLL rozšíření MFC.

Je bezpečné předat ukazatele na paměť, které byly přiděleny knihovnami běhu jazyka C mezi aplikací a knihovnou DLL pouze v případě, že vytvoříte kopii dat. Nesmíte odstranit ani změnit velikost těchto ukazatelů nebo je použít bez vytvoření kopie paměti.

Knihovna DLL, která je staticky propojená s knihovnou MFC, nemůže také dynamicky propojit sdílené knihovny MFC DLL. Knihovna DLL, která je staticky propojená s knihovnou MFC, je dynamicky svázaná s aplikací stejně jako jakákoli jiná knihovna DLL; aplikace na ni odkazují stejně jako na jakoukoli jinou knihovnu DLL.

Standardní knihovny statických propojení MFC jsou pojmenovány podle konvence popsané v konvencích pojmenování knihoven MFC DLL. V prostředí MFC verze 3.0 a novější však již není nutné ručně zadat linker verzi knihovny MFC, ve které chcete odkazovat. Místo toho soubory hlaviček MFC automaticky určují správnou verzi knihovny MFC, která se má propojit na základě definic preprocesoru, například _DEBUG nebo _UNICODE. Soubory hlaviček MFC přidávají direktivy /DEFAULTLIB pokyn linkeru, aby odkazoval v konkrétní verzi knihovny MFC.

Co chcete udělat?

O čem chcete vědět víc?

Viz také

Typy knihoven DLL