Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt functies op twee manieren exporteren: een .def-bestand of het __declspec(dllexport) trefwoord. Als u wilt bepalen welke manier beter is voor uw DLL, kunt u de volgende vragen overwegen:
Wilt u later meer functies exporteren?
Wordt uw DLL alleen gebruikt door toepassingen die u opnieuw kunt bouwen of wordt deze gebruikt door toepassingen die u niet opnieuw kunt bouwen, bijvoorbeeld toepassingen die door derden worden gemaakt?
Voor- en nadelen van het gebruik van .def Files
Als u functies in een .def-bestand exporteert, hebt u controle over de exportdinals. Wanneer u een geëxporteerde functie aan uw DLL toevoegt, kunt u deze een hogere rangtelwaarde toewijzen dan een andere geëxporteerde functie. Wanneer u dit doet, hoeven toepassingen die impliciete koppelingen gebruiken, niet opnieuw te koppelen aan de importbibliotheek die de nieuwe functie bevat. Dit is erg handig als u een DLL ontwerpt voor gebruik door veel toepassingen, omdat u nieuwe functionaliteit kunt toevoegen en er ook voor kunt zorgen dat deze correct blijft werken met de toepassingen die er al op vertrouwen. De MFC-DLL's worden bijvoorbeeld gebouwd met behulp van .def-bestanden.
Een ander voordeel van het gebruik van een .def-bestand is dat u het NONAME kenmerk kunt gebruiken om een functie te exporteren. Hiermee wordt alleen het ordinaal in de exporttabel in de DLL geplaatst. Voor DLL's met een groot aantal geëxporteerde functies kan het NONAME kenmerk de grootte van het DLL-bestand verkleinen. Voor informatie over het schrijven van een moduledefinitie-instructie, zie Regels voor Module-Definition-instructies. Zie Exporteren van functies uit een DLL aan de hand van een ordinaal in plaats van een naam voor informatie over het exporteren volgens een ordinaal.
Een nadeel van het gebruik van een .def-bestand is dat als u functies exporteert in een C++-bestand, u de versierde namen in het .def-bestand moet plaatsen of de geëxporteerde functies definieert met behulp van extern C om de naamdecoratie te voorkomen die wordt uitgevoerd door de MSVC-compiler (Microsoft C++).
Als u de versierde namen in het .def-bestand plaatst, kunt u deze verkrijgen met behulp van het hulpprogramma DUMPBIN of met behulp van de optie linker /MAP . De versierde namen die door de compiler worden geproduceerd, zijn compilerspecifiek; Als u daarom de versierde namen die door de compiler worden geproduceerd in een .def-bestand plaatst, moeten de toepassingen die een koppeling naar het DLL-bestand maken, ook worden gebouwd met dezelfde versie van de compiler, zodat de versierde namen in de aanroepende toepassing overeenkomen met de geëxporteerde namen in het .def-bestand van het DLL-bestand.
Voor- en nadelen van het gebruik van __declspec(dllexport)
Het gebruik __declspec(dllexport) is handig omdat u zich geen zorgen hoeft te maken over het onderhouden van een .def-bestand en het verkrijgen van de versierde namen van de geëxporteerde functies. Het nut van deze manier van exporteren wordt echter beperkt door het aantal gekoppelde toepassingen dat u wilt herbouwen. Als u het DLL-bestand opnieuw opbouwt met nieuwe exports, moet u de toepassingen ook opnieuw bouwen, omdat de versierde namen voor geëxporteerde C++-functies kunnen veranderen als u een andere versie van de compiler gebruikt om deze opnieuw te bouwen.
Wat u wilt doen?
C++-functies exporteren voor gebruik in uitvoerbare bestanden in de C-taal
C-functies exporteren voor gebruik in uitvoerbare bestanden in C- of C++-taal
Importeren in een toepassing met behulp van __declspec(dllimport)