Looking for winapi Keywords? Try Ask4Keywords

Win32 APIErste Schritte mit der Win32-API


Bemerkungen

WinAPI (auch bekannt als Win32; offiziell als Microsoft Windows API bezeichnet) ist eine von Microsoft in C geschriebene Programmierschnittstelle, die den Zugriff auf Windows-Funktionen ermöglicht. Die Hauptkomponenten der WinAPI sind:

  • WinBase: Die Kernel-Funktionen CreateFile, CreateProcess usw
  • WinUser: Die GUI-Funktionen CreateWindow, RegisterClass usw
  • WinGDI: Die Grafikfunktionen, Ellipse, SelectObject usw
  • Allgemeine Steuerelemente: Standardsteuerelemente, Listenansichten, Schieberegler usw

Siehe auch:

Versionen

Die Versionen der API sind an die Betriebssystemversion gebunden. Die MSDN-Dokumentation gibt den Mindestwert für das unterstützte Betriebssystem für jede Funktion in der API an.

Hallo Welt

Microsoft Windows-Anwendungen werden normalerweise entweder als Konsolenanwendung oder als Fensteranwendung geschrieben (es gibt andere Typen wie Dienste und Plug-Ins). Der Unterschied für den Programmierer ist der Unterschied in der Schnittstelle für den Haupteinstiegspunkt für die Anwendungsquelle, die vom Programmierer bereitgestellt wird.

Wenn eine C- oder C ++ - Anwendung gestartet wird, ist der vom ausführbaren Lader verwendete ausführbare Einstiegspunkt die vom Compiler bereitgestellte Runtime. Der ausführbare Lader liest die ausführbare Datei ein, führt alle erforderlichen Korrekturen an dem Image aus und ruft dann den ausführbaren Einstiegspunkt auf, der für ein C- oder C ++ - Programm die vom Compiler bereitgestellte Runtime ist.

Der vom Loader aufgerufene ausführbare Einstiegspunkt ist nicht der vom Anwendungsprogrammierer bereitgestellte Haupteinstiegspunkt, sondern die vom Compiler bereitgestellte Laufzeitumgebung und der Linker, der die ausführbare Datei erstellt. Die Laufzeitumgebung richtet die Umgebung für die Anwendung ein und ruft dann den vom Programmierer bereitgestellten Haupteinstiegspunkt auf.

Eine Windows-Konsolenanwendung kann mehrere leicht unterschiedliche Schnittstellen für den vom Programmierer bereitgestellten Haupteinstiegspunkt haben. Der Unterschied zwischen diesen beiden ist, ob der Haupteinstiegspunkt das traditionelle int main (int argc, char *argv[]) oder ob es sich um die Windows-spezifische Version von int _tmain(int argc, _TCHAR* argv[]) die wide bereitstellt Zeichen in den Anwendungsparametern. Wenn Sie ein Windows Win32-Konsolenanwendungsprojekt mit Visual Studio generieren, handelt es sich bei der generierten Quelle um die Windows-spezifische Version.

Eine Windows-Fensteranwendung (GUI) verfügt über eine andere Schnittstelle für den vom Programmierer bereitgestellten Haupteinstiegspunkt. Dieser vom Programmierer bereitgestellte Haupteinstiegspunkt hat eine komplexere Schnittstelle, da die Runtime eine GUI-Umgebung einrichtet und zusätzliche Informationen zusammen mit den Anwendungsparametern enthält.

In diesem Beispiel wird die Benutzeroberfläche des Windows-Einstiegspunkts (GUI) erläutert. Um diese Themen zu erkunden, sollten Sie Folgendes haben:

  • eine IDE mit Compiler (vorzugsweise Visual Studio)
  • C Wissen

Erstellen Sie ein leeres Win32-Fensterprojekt (GUI, nicht Konsole) mithilfe der IDE. Die Projekteinstellungen müssen für eine Fensteranwendung (keine Konsolenanwendung) festgelegt werden, damit der Linker mit der richtigen Runtime verknüpft werden kann. Erstellen Sie eine main.c Datei, die Sie dem Projekt hinzufügen, und geben Sie den folgenden Code ein:

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
    return MessageBox(NULL, "hello, world", "caption", 0);
}
 

Dies ist unser Win32-Programm "Hallo, Welt". Der erste Schritt besteht darin, die Windows-Header-Dateien einzubinden. Der Hauptheader für Windows ist windows.h , aber es gibt noch andere.

WinMain unterscheidet sich von einem Standard int main() der mit einer Konsolenanwendung verwendet wird. In der Schnittstelle werden mehr Parameter verwendet, und was noch wichtiger ist, der Haupteinstiegspunkt für eine Fensteranwendung verwendet eine Aufrufkonvention, die sich von Standard C / C ++ unterscheidet.

Der Qualifier APIENTRY gibt die Aufrufkonvention, das ist die Reihenfolge , in der Argumente auf dem Stack gedrückt. Standardmäßig ist die Aufrufkonvention die durch __cdecl angegebene Standard-C-Konvention. Microsoft verwendet jedoch eine andere Art der Aufrufkonvention, die PASCAL-Konvention, für die Windows-API-Funktionen, die vom Qualifikationsmerkmal __stdcall angegeben wird. APIENTRY ist ein definierter Name für __stdcall in einer der in windows.h enthaltenen Header-Dateien (siehe auch Was ist __stdcall? ).

Die nächsten Argumente für WinMain lauten wie folgt:

Wir verwenden noch keines dieser Argumente.

Innerhalb von WinMain() befindet sich ein Aufruf von MessageBox() , der ein einfaches Dialogfeld mit einer Nachricht, einem Meldungsfeld, anzeigt. Das erste Argument ist das Handle für das Eigentümerfenster. Da wir noch kein eigenes Fenster haben, übergeben Sie NULL . Das zweite Argument ist der Haupttext. Das dritte Argument ist die Beschriftung und das vierte Argument enthält die Flags. Wenn 0 übergeben wird, wird ein Standardmeldungsfeld angezeigt. Das folgende Diagramm zeigt den Meldungsfelddialog.

Geben Sie hier die Bildbeschreibung ein

Gute links:

Nur bei 32-Bit-Systemen. Andere Architekturen haben andere Aufrufkonventionen.