Rozhodnutí, kterou exportovací metodu použít
Můžete exportovat funkce dvěma způsoby – soubor .def nebo __declspec(dllexport) klíčové slovo.Chcete-li pomoci při rozhodování, který způsob je lepší pro vaši knihovnu DLL, zvažte následující otázky:
Plán pro exportování funkcí další později?
Je vaše knihovna DLL používaná pouze aplikacemi, které lze znovu vytvořit nebo je používán aplikacemi, které nelze znovu vytvořit, například aplikace, které jsou vytvořeny ve třetím stranám?
Výhody a nevýhody použití .def souborů
Exportování funkcí v .def souboru umožňuje, ovládat exportních řadových.Při přidání exportované funkce knihovny DLL, můžete ji přiřadit hodnotu pořadové číslo vyšší než jiných exportovaných funkcí.Pokud to uděláte, aplikace, které používají implicitní propojení není nutné znovu propojit s importovanou knihovnou, která obsahuje nové funkce.To je užitečné, pokud navrhujete knihovnu DLL pro použití mnoho aplikací, protože můžete přidat nové funkce a také zajistit jej nadále pracovat správně s aplikací, které již spolehnout.Příklad knihovny DLL MFC jsou sestaveny pomocí souborů .def.
Další výhodou použití souboru .def je, že lze použít NONAME atribut pro export funkcí.To umístí pouze pořadí v exportní tabulce v knihovně DLL.Pro knihovny DLL, které mají velký počet exportovaných funkcí, použití NONAME atribut můžete snížit velikost souboru knihovny DLL.Informace o psaní příkazů definice modulu naleznete v tématu Pravidla definicí modulu výkazů.Informace o exportu podle pořadového čísla, viz Exportování funkcí z knihovny DLL podle pořadí, nikoli podle názvu.
Nevýhodou použití souboru .def je, že pokud exportujete funkce v souboru jazyka C++, můžete mít buď umístit .def dekorované názvy souborů nebo definovat exportovaných funkcí pomocí extern "C", aby název dekorace, kterou má provést pomocí kompilátoru Visual C++.
Jsou-li v souboru .def dekorované názvy, můžete je získat pomocí DUMPBIN nástroje nebo pomocí propojovacího programu /map možnost.Dekorované názvy, které jsou vytvořeny kompilátorem jsou specifické pro kompilátor; Proto pokud umístíte dekorované názvy, které jsou vytvářeny pomocí kompilátoru do .def souboru, aplikace, které jsou propojeny ke knihovně DLL musí také sestavit pomocí stejné verze kompilátoru tak, aby dekorované názvy ve volání aplikace odpovídaly exportovaným názvům v .def souboru knihovny DLL.
Výhody a nevýhody použití __declspec(dllexport)
Pomocí __declspec(dllexport) je pohodlné, protože není třeba udržovat soubor .def a získávat dekorované názvy exportovaných funkcí.Užitečnost tímto způsobem exportu je však omezen počet propojených aplikací, které chcete znovu vytvořit.Pokud sestavíte knihovnu DLL s novými exporty, máte také znovu sestavit aplikace, protože dekorované názvy pro exportované funkce C++ může změnit, pokud používáte jinou verzi kompilátoru znovu sestavit.
Co chcete udělat?
Export funkcí jazyka C++ pro použití ve spustitelných souborech jazyka C
Export funkcí jazyka C++ pro použití ve spustitelných souborech jazyka C