Windows API regt mich auf

Gast #580043
Lesenswert?

Hallo liebe Leute,

bisher habe ich Windows-Anwendungen (professionell) mit Visual C und 
WIN-API programmiert. Mikrocontroller-Programme habe ich immer in 
Assembler geschrieben, bis ich vor kurzem den C18 für mich entdeckt 
habe. Es ist eine wahre Freude, wie einfach und logisch die Bibliotheken 
aufgebaut sind. Mit 1 Statement wird die serielle Verbindung geöffnet 
und ist danach bereit für die Übertragung. Sehe ich mir hingegen das 
gleiche in der WIN-API an, wird mir schwindelig. Erstmal nen Handle, 
Dann ne Funktion und als Parameter nen Pointer auf Struct, das natürlich 
zuvor sauber gefüllt werden muss. Und das Ganze bis zum Erbrechen, bis 
man endlich mal nach draussen kommt.

Wieso muss das denn alles so komplizier gehen. Müssen Funktionen 
wirklich 10 und mehr Parameter haben?

Gruß
Christian
Gast #580163
Lesenswert?

Gerade bei der seriellen Schnittstelle verstehe ich das auch nicht
ganz. Die direkte Initialisierung des UART-Bausteins würde deutlich
weniger Code-Zeilen in Anspruch nehmen. Klar, die OS-Hersteller
versuchen natürlich, ein hardwareunabhängiges API zu schaffen, dabei
aber trotzdem sämtliche Features der Hardware dem Programmierer
verfügbar zu machen.

Idealer aus Programmierersicht wäre sicher ein API, bei dem mit einer
Funktion mit wenigen Argumenten die häufig benutzten Schnittstellen-
parameter (Baudrate, Parität, Stoppbits) eingestellt werden. Für den
Rest sollten sinnvolle Defaultwerte vorhanden sein, die bei Bedarf
über weitere Funktionen verändert werden können.

Aber Betriebssystem-APIs sind nicht primär auf einfache Benutzung
ausgelegt. Da spielen andere Aspekte eine Rolle, wi z. B. Abwärts-
kompatibilität zu irgendwelchen Uraltversionen oder leichte
Erweiterbarkeit ohne Kompatibilitätsprobleme.

Immerhin sind es für die meisten Programmiersprachen und Betriebs-
systeme programmiererfreundliche Wrapperbibliotheken zu finden. Dann
hat man es so leicht wie in VB. Das Problem ist, dass man in der Zeit,
in der man diese Bibliotheken sucht, meist auch die direkte Variante
hinbekommt.
Moderator Persönliche Seite #580175
Lesenswert?

MS ist aber auch bekannt für aufgeblasene APIs.  Das Starten eines
neuen Programms gehört wohl mit zu den größten Horrorgeschichten.
Im Vergleich dazu braucht das Unix-API zwar zwei separate
Funktionsaufrufe (fork und exec), aber dafür konzentrieren diese
sich auf das Wesentliche.  Werden zusätzliche Dinge benötigt (wie
z. B. das Erzeugen einer Pipe), dann kann man diese dazwischen
schieben.
#580190
Lesenswert?

>Das Starten eines neuen Programms gehört wohl mit zu den größten 
>Horrorgeschichten.

?

Result := WinExec(ExeName, SW_ShowNormal);

oder besser

ShellExecute(MainForm.Handle, 'open', <Programmdatei>,
             <Aufrufparameter>, '', SW_SHOWNORMAL);

Fertig.

Natürlich kann man das beliebig kompliziert machen, vor allem wenn der 
aufrufende Prozess auf das Ende des aufgerufenen Prozesses warten soll. 
Aber generell ist das Starten eines Programms trivial.
Gast #580223
Lesenswert?

> ShellExecute(MainForm.Handle, 'open', <Programmdatei>,
>              <Aufrufparameter>, '', SW_SHOWNORMAL);

Naja, um ein Programm in einer Shell zu starten, gibt es ja auch noch
1
int system(const char *string);
aus der C-Standardbibliothek. Der Aufruf ist maximal einfach und
sollte in jedem Betriebssystem funktionieren.

Aber es ging ja ursprünglich um das OS-API für die serielle
Schnittstelle. Und das ist sogar unter Unix/Linux ziemlich
kompliziert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren