Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kyunk
Anmeldungsdatum: 13.01.2007 Beiträge: 11 Wohnort: Dortmund
|
Verfasst am: 16.01.2007, 17:49 Titel: WinAPI´s und DOS Programmierung |
|
|
Hallo! Mal wieder zwei sinnlose Fragen von mir
Also, ich lese an jeder Ecke von Windows API´s.
Allerdings weiss ich nicht, wie man diese verwendet!
Könntet ihr mir das kurz erklären? Scheint ja wohl doch nicht so einfach
zu sein.
Das zweite ist: Wie Programmiere ich ein Programm für DOS?
Ich habe aus der FB-hilfe entnommen, das man dies mit
#IFDEF __FB_DOS__ realisierbar ist. Kann ich dann wie gewohnt programmieren? Also einfach auf "Run->Kompilieren" klicken und die Datei in DOS starten?
Danke im vorraus!
Mfg, kyunk! _________________ "Ich mag kein Italienisch, ich hol mir lieder ´ne Pizza " |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.01.2007, 19:30 Titel: |
|
|
zu 1) Banal gesagt sind APIs einfach nur SUBs und FUNCTIONs. API-Funktionene kannst du über eine DECLARE-Anwiesung in deinem prog bekannt machen und dann wie jeden anderen fb-befehl nutzen.
2) das ifdef __fb_dos__ ist nur nötig, wenn ud willst ,dass ein bestimmtes stück quellcode NUR für dos kompiliert werden soll. das problem ist, dass du für dos, linux und windows verschiedene compiler brauchst. also für dos benötigst dueine andere fbc.exe als für windows. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 16.01.2007, 19:38 Titel: |
|
|
Hi,
1. hier wurde gerade ein Thread ausgegraben:
http://forum.qbasic.at/viewtopic.php?p=11791#11791
Sonst schau dich mal unter Windows-spezifische Fragen um.
2. Zitat: | "Run->Kompilieren" klicken und die Datei in DOS starten? | Das glaube ich nicht, da es keine Benutzeroberfläche (GUI) für DOS gibt bleibt nur die Batch-Datei! _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
kyunk
Anmeldungsdatum: 13.01.2007 Beiträge: 11 Wohnort: Dortmund
|
Verfasst am: 16.01.2007, 22:16 Titel: |
|
|
Danke für eure Antworten!
@Jojo: Weisst du, woher ich den Kompiler für DOS bekomme? (Brauch man für Linux auch einen anderen?)
Mfg, kyunk! _________________ "Ich mag kein Italienisch, ich hol mir lieder ´ne Pizza " |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 16.01.2007, 22:30 Titel: |
|
|
kyunk hat Folgendes geschrieben: | Danke für eure Antworten!
@Jojo: Weisst du, woher ich den Kompiler für DOS bekomme? (Brauch man für Linux auch einen anderen?)
|
Da: http://freebasic.net/index.php/download
... und ja; für Linux brauchst du auch einen anderen  |
|
Nach oben |
|
 |
FreakBasic
Anmeldungsdatum: 19.11.2006 Beiträge: 49
|
Verfasst am: 17.01.2007, 04:34 Titel: WinAPI und DOS |
|
|
Zitat: | Also, ich lese an jeder Ecke von Windows API´s. |
Ich auch
Zitat: | Das zweite ist: Wie Programmiere ich ein Programm für DOS? |
1. (sicher) DOS Version von FB.
2. (??? unsicher) Target DOS, Crosscompileren von Windoof
Zitat: | Ich habe aus der FB-hilfe entnommen, das man dies mit
#IFDEF __FB_DOS__ realisierbar ist. |
Falsch. Dieses "testet" nur ob fuer DOS compilert wird oder nicht.
Zitat: | Kann ich dann wie gewohnt programmieren? |
Jein. Insbesondere die Windoof-API steht dann NICHT zur
Verfuegung Also RBIL, VGA, VESA, HW-ports, ...
Zitat: | Also einfach auf "Run->Kompilieren" klicken und die Datei in DOS starten? |
Mindestens:
1. Target DOS
2. Musst du ueberhaupt erst DOS haben. Hast du ein DOS ??  |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 17.01.2007, 10:00 Titel: |
|
|
Ich möchte an dieser Stelle mal auch die ketzerische Frage stellen, wie sinnvoll denn es ist, mit der Win-API zu programmieren. Seit Mitte der 90er-Jahre, als Borland seine OWL und MS seine MFC vorgestellt hat, gilt API-Programmieren meines Wissens aus guten Gründen als out, weil ineffizient. Auch für FB gibt es jede Menge gute Bibliotheken wie z.B. GTK (und viele andere) für GUI, FMOD für Sound, winsock fürs Netzwerk usw.
Viele Grüsse!
Croco |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 17.01.2007, 11:41 Titel: |
|
|
(ketzerische Antwort)
Bei größeren Programmierobjekten ist die Benutzung reiner Win-API wohl nicht effizient und sinnvoll. Aber weshalb soll ich mir die Module (dll's) dieser Bibliotheken an das Programm hängen wenn ich nur Teile der Win-API (Messagebox, Dateiauswahl etc.) nutzen möchte.
Zum Anderen findet man keine Bibliotheken die zum Beispiel Videocapturing, einfache Sprachausgabe ermöglichen oder sie sind noch weit komplizierter als die Win-API.
Und dann noch die Kostenfrage. Mit der Windows-Lizenz darf ich auch in kommerziellen Programmen die Win-API benutzen aber leider sind nicht alle anderen Bibliotheken damit kostenfrei.
Ein guter Grund gegen die Win-API ist natürlich das Programm auch für andere Plattformen nutzbar zu machen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 17.01.2007, 16:02 Titel: |
|
|
Für Fensterprogrammierung ist auch die VCL von Borland nicht zu vergessen. (Aber wohl nur für Delphi-Programmierer wichtig. Und auch die gehen mittlerweile wieder hin zur nonVCL-Programmierung. Heißt, alles (auch Fenster und Controls) wie bei FB selbst über WinAPI erstellen.)
@FreakBasic:
Du widersprichst dir selber.
Ein Crosscompiler ist ein Compiler, der für ein System compilieren kann, das momentan nicht läuft. Heißt, er braucht dafür auch kein DOS.
Und da der Großteil (leider) sowieso Windows benutzt, ist eine DOS-Emulation (ntvdm) eh dabei. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 17.01.2007, 16:36 Titel: |
|
|
volta hat Folgendes geschrieben: | (ketzerische Antwort)
Bei größeren Programmierobjekten ist die Benutzung reiner Win-API wohl nicht effizient und sinnvoll. Aber weshalb soll ich mir die Module (dll's) dieser Bibliotheken an das Programm hängen wenn ich nur Teile der Win-API (Messagebox, Dateiauswahl etc.) nutzen möchte.
Zum Anderen findet man keine Bibliotheken die zum Beispiel Videocapturing, einfache Sprachausgabe ermöglichen oder sie sind noch weit komplizierter als die Win-API.
Und dann noch die Kostenfrage. Mit der Windows-Lizenz darf ich auch in kommerziellen Programmen die Win-API benutzen aber leider sind nicht alle anderen Bibliotheken damit kostenfrei.
Ein guter Grund gegen die Win-API ist natürlich das Programm auch für andere Plattformen nutzbar zu machen. |
... und weil ein Programm das die native WinAPI nutzt schneller läuft als eines das z.B. GTK verwendet. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 17.01.2007, 16:54 Titel: |
|
|
Warum einfach wenn's auch kompliziert geht? Das ist ein Motto, wenn man zu externen bibliotheken greift, die genau das selbe können wie die winAPI. natürlich ist es was anderes, wenn man FMOD oder OpenGL verwendet, denn die bieten ja viel mehr als die API, nur mal so als beispiel.. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 17.01.2007, 19:08 Titel: |
|
|
Zitat: | Warum einfach wenn's auch kompliziert geht? |
Eben. Dann machen wir mal mit der WinAPI ein einfaches Fenster auf. Unter 60 Zeilen ist da nichts zu wollen, angefangen mit
Code: |
defint a-z
function WinMain ( byval hInstance as long, _
byval hPrevInstance as long, _
szCmdLine as string, _
byval iCmdShow as integer ) as integer
dim wMsg as MSG
dim wcls as WNDCLASS
dim szAppName as string
dim hWnd as unsigned long
WinMain = 0
''
'' Setup window class
''
szAppName = "HelloWin"
with wcls
.style = CS_HREDRAW or CS_VREDRAW
.lpfnWndProc = @WndProc
.cbClsExtra = 0
.cbWndExtra = 0
.hInstance = hInstance
.hIcon = LoadIcon( null, IDI_APPLICATION )
.hCursor = LoadCursor( null, IDC_ARROW )
.hbrBackground = GetStockObject( WHITE_BRUSH )
.lpszMenuName = null
.lpszClassName = strptr( szAppName )
end with
(...)
(...)
(...)
|
usw. Ist das einfach? Nicht nach meinem Geschmack...
So, und nun machen wir das Ganze mit GTK+:
Code: |
Dim win1 as GtkWidget ptr
Dim btn1 as GtkWidget ptr
Dim btn1c as GtkWidget ptr
gtk_init( 0, 0 )
win1 = gtk_window_new( GTK_WINDOW_TOPLEVEL )
gtk_window_set_title( GTK_WINDOW(win1), "My test window" )
gtk_widget_set_usize( win1, 640, 480 )
gtk_widget_set_uposition( win1, 200, 200 )
gtk_container_set_border_width( GTK_CONTAINER(win1), 5 )
|
...und gut ist. Dass ich dafür noch ne DLL ans Proggi dranhängen muss, ist im GB-Zeitalter nun wirklich kein relevantes Kriterium mehr - auch wen n ich natürlich Programme, die aus einer einzigen 10k-exe bestehen und einen kompletten Ego-Shooter damit realisieren auch schnuckelig finde...
Grüsse!
Croco |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 17.01.2007, 20:01 Titel: |
|
|
so ein beispiel meinte ich nicht
ich meinte eigentlich die ganzen tollen winAPI-funktionen wie z.B. messageboxen, filesystem, und so weiter. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
kyunk
Anmeldungsdatum: 13.01.2007 Beiträge: 11 Wohnort: Dortmund
|
Verfasst am: 17.01.2007, 20:29 Titel: |
|
|
Hehe, sind ja schon wieder einige Begriffe und Sachen,
welche mir nicht ganz klar sind.
Ich fange mal an
@FreakBasic:
DOS direkt habe ich nicht, aber eine MS-Dos startdiskette erstellt.
Ein bekannter von mir gibt mir nächsten Monat eine Festplatte, wo ich dann DOS drauf installieren kann (1GB, aber ich denke (hoffe) das das reicht ).
Dann hab ich mir GTK+ 2.8 runtergeladen und deinen Code einfach mal in mein FB Fenster reinkopiert - tut sich nichts. Welche Dateien muss ich denn kopieren (habe ich so verstanden) oder was muss ich machen?
Bibliotheken - sind doch DLL´s welche Funktionen oder Routinen beinhalten oder?
Ist also GTK+ auch nur eine DLL Datei, oder wie ist das zu verstehen?
Habe dafür noch nicht ganz den durchblick
Danke für alle eure Antworten
Mfg, kYunk! _________________ "Ich mag kein Italienisch, ich hol mir lieder ´ne Pizza " |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 17.01.2007, 23:05 Titel: |
|
|
Hallo kyunk!
Das generelle Prinzip, wie sich OS, Win-API, Libs, Headers etc. zueinander verhalten,
ist hier erklärt. . Wie das dann technisch funktioniert,
ist hier recht ausführlich beschrieben..
Summary: Im Prinzip brauchst du die passende bi-Datei, die bei FB mit dabei ist und die passende dll. (Praktisch ist auch noch eine
dll.a-Datei, da du dann statisch linken kannst.) Das erweitert dann quasi den Befehlssatz von FB um die entsprechenden Funktionen,
bei GTK z.B. hauptsächlich GUI, bei Fmod Sound, bei OpenGL 3D-Animation usw.
Es ist eine Stärke von FB, dass es Zugang zu einer Unzahl von solchen Libs bietet. (Im Prinzip zu allen, die auch von C/C++ aus zugänglich sind.)
Viele Grüsse!
Croco |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 18.01.2007, 13:59 Titel: |
|
|
croco97 hat Folgendes geschrieben: |
Zitat: | Warum einfach wenn's auch kompliziert geht? | Eben. Dann machen wir mal mit der WinAPI ein einfaches Fenster auf. Unter 60 Zeilen ist da nichts zu wollen, angefangen mit
usw. Ist das einfach? Nicht nach meinem Geschmack...
So, und nun machen wir das Ganze mit GTK+:
...und gut ist. Dass ich dafür noch ne DLL ans Proggi dranhängen muss, ist im GB-Zeitalter nun wirklich kein relevantes Kriterium mehr - auch wen n ich natürlich Programme, die aus einer einzigen 10k-exe bestehen und einen kompletten Ego-Shooter damit realisieren auch schnuckelig finde... |
und noch einfacher in FB ist die fbgfx-lib, als Einzeiler ...
Ich will dich damit nicht ärgern oder provozieren, ich empfinde nur eine pauschale Ablehnung der Win-API als ungerechtfertigt.
Sie hat Ihre sinnvollen Nischenanwendungen. _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
croco97

Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 18.01.2007, 14:23 Titel: |
|
|
Zitat: |
und noch einfacher in FB ist die fbgfx-lib, als Einzeiler
|
Das ist sachlich nicht klärend, die gfxlib ist keine GUI-Lib. Aber mit GTK kann man mind. 80% dessen abdecken, was man mit der Win-API auch machen kann. Vielleicht kann man die CD-Schublade nicht öffnen, OK...
Zitat: |
Sie hat Ihre sinnvollen Nischenanwendungen.
|
Das sei unbestritten. Aber ich glaube nicht, dass es hier viele Leute gibt, die diese Nischenanwendungen im Blick haben, wenn sie nach der Win-API fragen...
Wie dem auch sei: Es ist immer wichtig, das richtige Vorbild zu haben. Für mich ist das im Hinblick auf Effizienz der Delphi- und der .NET-Programmierer, die beide in er Lage sind, mit Hilfe ihrer Ressourcen innerhalb von 2 Tagen Anwendungen auf die Beine zu stellen, die dem Bedienungskomfort-Anspruch professioneller Software voll gerecht werden. Bis dahin hat FB inkl. GTK und Konsorten noch einen weiten Weg, behaupte ich mal. (Gegenbeispiele sind willkommen!) Das ist OK so. Aber der Weg sollte nicht rückwärts beschritten werden...
Grüsse!
Croco
Grüsse!
Croco |
|
Nach oben |
|
 |
kyunk
Anmeldungsdatum: 13.01.2007 Beiträge: 11 Wohnort: Dortmund
|
Verfasst am: 18.01.2007, 17:16 Titel: |
|
|
Hallo croco97 und alle anderen!
Danke für deine erklärung, die hat mich schonmal weiter gebracht
Werde mich jetzt nur noch über Befehle und Funktionen in GTK+ informieren!
Eine Frage zur DOS Programmierung habe ich noch, undzwar:
Ich habe mir den Compiler runtergeladen, endtpackt und die fbc.exe in den FB Einstellungen ausgewählt. Allerdings klappt es nicht, ein Programm welches ich so Kompiliert habe, unter DOS zu starten.
Es kommt eine seltsame Fehlermeldung aus einige Zeichen.
Das Programm greift auf keine API´s und LIB´s zu, sondern ist ganz einfach (http://nopaste.info/e0b296f536.html).
Was muss ich machen, damit mein "Programm" unter DOS läuft?
Gruß, kYunk! _________________ "Ich mag kein Italienisch, ich hol mir lieder ´ne Pizza " |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.01.2007, 18:18 Titel: |
|
|
Fehlt dir *ganz zufällig* der DPMI-Speichermanager? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
kyunk
Anmeldungsdatum: 13.01.2007 Beiträge: 11 Wohnort: Dortmund
|
Verfasst am: 18.01.2007, 19:05 Titel: |
|
|
Was ein zufall
Muss ich den einfach in das Verzeichnis wo die EXE Datei ist einfügen?
Und wo bekomme ich den her? (Bei google finde ich nichts)
Mfg, kyunk _________________ "Ich mag kein Italienisch, ich hol mir lieder ´ne Pizza " |
|
Nach oben |
|
 |
|