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.
Als u ervoor kiest om samen met een .def-bestand te gebruiken __declspec(dllimport) , moet u het .def-bestand wijzigen om GEGEVENS te gebruiken in plaats van CONSTANT om de kans te verkleinen dat onjuiste codering een probleem veroorzaakt:
// project.def
LIBRARY project
EXPORTS
ulDataInDll DATA
In de volgende tabel ziet u waarom.
| Trefwoord | Emitteert in de importbibliotheek | Exporten |
|---|---|---|
CONSTANT |
_imp_ulDataInDll, _ulDataInDll |
_ulDataInDll |
DATA |
_imp_ulDataInDll |
_ulDataInDll |
Met behulp van __declspec(dllimport) en CONSTANT worden zowel de imp versie als de ongemarkeerde naam weergegeven in de .lib DLL-importbibliotheek die is gemaakt om uitdrukkelijke koppeling mogelijk te maken. Met behulp van __declspec(dllimport) en DATA wordt alleen de imp versie van de naam vermeld.
Als u CONSTANT gebruikt, kunt u een van de volgende codeconstructies gebruiken om toegang te krijgen tot ulDataInDll:
__declspec(dllimport) ULONG ulDataInDll; /*prototype*/
if (ulDataInDll == 0L) /*sample code fragment*/
– of –
ULONG *ulDataInDll; /*prototype*/
if (*ulDataInDll == 0L) /*sample code fragment*/
Als u ECHTER DATA in uw .def-bestand gebruikt, heeft alleen code die is gecompileerd met de volgende definitie toegang tot de variabele ulDataInDll:
__declspec(dllimport) ULONG ulDataInDll;
if (ulDataInDll == 0L) /*sample code fragment*/
Het gebruik van CONSTANT is riskanter omdat als u vergeet het extra indirectieniveau te gebruiken, u mogelijk toegang hebt tot de aanwijzer van de importadrestabel naar de variabele, niet naar de variabele zelf. Dit type probleem kan vaak optreden als een schending van toegang omdat de importadrestabel momenteel alleen-lezen wordt gemaakt door de compiler en linker.
Met de huidige Microsoft C++ (MSVC)-linker wordt een waarschuwing weergegeven als CONSTANT in het .def-bestand wordt gevonden om met dit geval rekening te houden. De enige echte reden om CONSTANT te gebruiken, is als u een objectbestand niet opnieuw kunt compileren waarbij het headerbestand niet op het prototype werd vermeld __declspec(dllimport) .