Frage

Soweit ich weiß, nur die Anrufer-clean-Stack-Konvention kann variable Argumente verwenden.
By the way, ist der WinApi StringCchPrintfW wie folgt erklärt. (Ich habe das SAL entfernt)

  

__ inline HRESULT __ stdcall
  StringCchPrintfW (
  STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat, ...
  );

Can stdcall entweder eine variable Argumente haben?

War es hilfreich?

Lösung

Nein. Die stdcall Aufrufkonvention hat die Angerufenen sauber der Stapel. Da die Angerufene des Stapels ist die Reinigung gibt es keine Möglichkeit für sie bei der Kompilierung zu wissen, wie viel abspringt, daher kann es nicht variable Argumente hat.

Um variable Anzahl von Funktionsargumente zu haben, die Sie verwenden müssen stdcall , oben erwähnt. Ich zitiere:

  

Der Angerufene reinigt den Stapel, so dass die   Compiler macht Vararg Funktionen    __ cdecl .

Dies kann beobachtet werden, wenn der folgende Code kompiliert und ein Aufruf der Funktion zerlegt.

int __stdcall Bar(int a, int b, ...)
{
  return b * a;
}

Der resultierende Code wird als __cdecl behandelt werden. In Bezug auf den Grunde Dies ist definiert auf diese Weise, weiß ich nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top