Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# Language Conventions d'appel


Exemple

Il existe plusieurs conventions d'appel de fonctions, spécifiant qui (appelant ou appelé) affiche les arguments de la pile, comment les arguments sont transmis et dans quel ordre. C ++ utilise la convention d'appel Cdecl par défaut, mais C # attend StdCall , qui est généralement utilisé par l'API Windows. Vous devez changer l'un ou l'autre:

  • Changer la convention d' StdCall en StdCall en C ++:

    extern "C" __declspec(dllexport) int __stdcall add(int a, int b)
    
    [DllImport("myDLL.dll")]
    
  • Ou, changez la convention d' Cdecl en Cdecl en C #:

    extern "C" __declspec(dllexport) int /*__cdecl*/ add(int a, int b)
    
    [DllImport("myDLL.dll", CallingConvention = CallingConvention.Cdecl)]
    

Si vous souhaitez utiliser une fonction avec la convention d'appel Cdecl et un nom tronqué, votre code ressemblera à ceci:

__declspec(dllexport) int add(int a, int b)
[DllImport("myDLL.dll", CallingConvention = CallingConvention.Cdecl,
           EntryPoint = "?add@@YAHHH@Z")]
  • thiscall ( __thiscall ) est principalement utilisé dans les fonctions membres d'une classe.

  • Lorsqu'une fonction utilise thiscall ( __thiscall ), un pointeur vers la classe est transmis comme premier paramètre.