Utilisation d'un PInvoke explicite en C++ (attribut DllImport)
Mise à jour : novembre 2007
Le .NET Framework fournit des fonctionnalités d'appel de code non managé (ou PInvoke) explicites avec l'attribut Dllimport pour autoriser les applications managées à appeler des fonctions non managées emballées à l'intérieur de DLL. Un PInvoke explicite est requis pour les situations où les API non managées sont emballées en tant que DLL et où le code source n'est pas disponible. Par exemple, l'appel de fonctions Win32 requiert PInvoke. Sinon, utilisez un PInvoke implicite ; consultez Utilisation de l'interopérabilité C++ (PInvoke implicite) pour plus d'informations.
PInvoke fonctionne à l'aide de DllImportAttribute. Cet attribut, qui prend le nom de la DLL comme premier argument, est placé avant une déclaration de fonction pour chaque point d'entrée de DLL devant être utilisé. La signature de la fonction doit correspondre au nom d'une fonction exportée par la DLL (mais une conversion d'un certain type peut être exécutée implicitement en définissant les déclarations DllImport en termes de types managés).
Le résultat est un point d'entrée managé pour chaque fonction DLL native qui contient le code de transition nécessaire (ou thunk) et des conversions de données simples. Les fonctions managées peuvent ensuite effectuer un appel dans la DLL par l'intermédiaire de ces points d'entrée. Le code inséré dans un module en tant que résultat de PInvoke est intégralement géré et le PInvoke explicite est pris en charge pour les compilations /clr, /clr:pure et /clr:safe. Pour plus d'informations, consultez Code pur et vérifiable.
Dans cette section
Comment : appeler des DLL natives à partir du code managé à l'aide de PInvoke
Comment : marshaler des pointeurs fonction à l'aide de PInvoke
Comment : marshaler des pointeurs incorporés à l'aide de PInvoke