Maison  >  Article  >  développement back-end  >  Quelles sont les conventions d’appel de fonctions en C++ ?

Quelles sont les conventions d’appel de fonctions en C++ ?

PHPz
PHPzoriginal
2024-04-12 13:51:02518parcourir

Les conventions d'appel en C++ définissent la façon dont les arguments de fonction sont transmis et les valeurs sont renvoyées, notamment cdecl, fastcall, thiscall et stdcall. En pratique, la convention d'appel stdcall peut être utilisée pour charger et appeler des fonctions dans une DLL.

C++ 中函数调用约定有哪些?

Convention d'appel de fonction C++

En C++, la convention d'appel définit la manière dont les paramètres d'une fonction sont transmis et renvoyés. Différentes conventions d'appel entraînent des compromis différents en termes de performances, d'utilisation de la mémoire et de portabilité du code.

Convention d'appel commune

  • cdecl (également connu sous le nom de stdcall) : Applicable à Windows et Linux, les paramètres sont poussés sur la pile de droite à gauche et affichés de gauche à droite.
  • fastcall : Utilisé uniquement sous Windows, les deux premiers paramètres sont transmis via des registres et les autres paramètres sont poussés sur la pile.
  • thiscall : Utilisé en programmation orientée objet pour les fonctions membres, le pointeur this est passé dans un registre comme premier paramètre.
  • stdcall : Similaire à cdecl, mais utilisant une décoration de nom de style Windows.

Cas pratique

Le code C++ suivant illustre une fonction utilisant la convention d'appel stdcall :

#include <windows.h> // 只适用于 Windows

typedef void (WINAPI *pfnPrintString)(const char*);

int main()
{
    // 加载 DLL 并获取函数指针
    HMODULE hDll = LoadLibrary("mydll.dll");
    pfnPrintString PrintString = (pfnPrintString)GetProcAddress(hDll, "PrintString");

    // 调用函数,传递参数
    PrintString("Hello, world!");

    // 卸载 DLL
    FreeLibrary(hDll);

    return 0;
}

Dans cet exemple, la fonction PrintString est chargée à partir d'une DLL et appelée en utilisant la convention d'appel stdcall.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn