|
Îåêßíçóå áðü ôï ìÝëïò Link3. Τελευταία δημοσίευση από το μέλος cap στις 11-01-2007, 13:53. Υπάρχουν 13 απαντήσεις.
-
09-05-2006, 11:57
|
-
Link3
-
-
-
Μέλος από τις 06-05-2006
-
No Man's Land
-
Δημοσιεύσεις 5
-
-
|
Χαιρετώ την παρέα..
Γράφτηκα στο Forum αυτό πριν λίγες μέρες, οδηγημένος απο τις ομολογουμένως πολύ ωραίες ιστορίες του Ζαχαρία Δεντοφτιάχνω.
Έχω ασχοληθεί στο παρελθόν με την VB6 κυρίως για Client/Server εφαρμογές με το winsock. Σύντομα όμως παράτησα γενικώς το coding σε πλατφόρμα Windows, και πήγα στο αντίπαλο στρατόπεδο, του Linux και του Open Source. (Το θέμα μοιάζει λίγο με του sugoruyo, "Ξεκινώντας σε Windows Προγραμματισμό", το οποίο έχω ήδη διαβάσει.)
Θέλω να ρωτήσω, ωστόσο κάτι πολύ πιο συγκεκριμένο. Τα System Calls στο POSIX είναι λίγα, απλά, κατανοητά και έυκολα (ή τουλάχιστον έτσι φάνηκαν σε μένα). Αντίθετα, το Win32 API έχει ένα τεράστιο όγκο συναρτήσεων για οτιδήποτε.
Υπάρχει κάπου "μαζεμένη" μια παρουσίαση και ανάλυση του Win32 API, που να απευθύνεται σε αρχάριους Windows προγραμματιστες ? Θα με βοηθούσε πολύ κάτι τέτοιο, μιας και διαβάζωντας τις ιστορίες του Ζαχαρία διαπίστωσα ότι υπάρχουν ένα σωρό τεχνολογίες τις οποίες γνωρίζω μόνο ονομαστικά, και στις οποίες θα ήθελα να εμβαθύνω λίγο περισσότερο.
Living In Nightmare's Kingdom...
|
|
-
09-05-2006, 12:14
|
-
09-05-2006, 13:16
|
-
Evangelos
-
-
-
Μέλος από τις 29-09-2005
-
Athens, Greece
-
Δημοσιεύσεις 29
-
-
|
Πληροφορίες για το Windows API θα βρεις στο MSDN...
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_api_start_page.asp
...που πιθανόν ήδη ξέρεις.
Το πρόβλημα είναι ότι για να καταπιαστεί κάποιος με το Windows API χωρίς να χρησιμοποιήσει έτοιμες βιβλιοθήκες, ή τελικά χωρίς να χρησιμοποιήσει το .NET framework, είναι γιατί θα πρέπει να θέλει να κάνει κάτι "επιπλέον".
Για παράδειγμα, μπορεί να βρεις προτιμότερο να χρησιμοποιήσεις μόνο Windows API, αν πρόκειται να φτιάξεις games με DirectX.
Γι' αυτό και δεν είναι εύκολο, σε ότι αφορά το Windows API, να βρεις οδηγό για "αρχαρίους".
|
|
-
09-05-2006, 21:14
|
-
09-05-2006, 21:25
|
-
09-05-2006, 23:56
|
-
Panagiotis Kefalidis
-
-

-
Μέλος από τις 09-05-2005
-
North America
-
Δημοσιεύσεις 1.204
-
-
|
Όπως διαπίστωσες υπάρχουν μεγάλες διαφορές με τα Unix System Calls..Όλα ξεκινάνε απο το κατω κατω επίπεδο, την assembly.. Πχ.. στο Unix έχεις ΕΝΑ interrupt όλο και όλο για να εκτελέσης μια εντολή, το int 0x80.Σε Windows έχεις άλλα τόσα.. To θέμα είναι, οτι σε Unix Based συστήματα, έχεις λίγα API λόγω του ότι ο πυρήνας είναι "μικρός"..Σου δίνει κάποια API για να μιλήσεις μαζί του, όταν όμως θέλεις να φτιάξεις ένα αρχείο,θα καλέσεις το API απο την library του filesystem το οποίο χρησιμοποιείς πχ ext3 για να δημιουργήσεις το αρχείο.Αυτό στα windows,υπάρχει ήδη μέσα στο kernel32.dll σαν CreateFileA..Τα API δεν είναι πολλά.. απλά οι βιβλιοθήκες των Windows, βγαίνουν (πολλές απο αυτές) μέσα απο το kernel32.dll, οπότε φαίνεται τεράστιος ο όγκος τους, όμως θα δεις οτι ακολουθούν μια φιλοσοφία και μια ομαδοποιήση..Υποθέτω οτι σε Unix έγραφες σε C οπότε η C# θα σου φανεί αρκετά εύκολη ώστε να την μάθεις..
Παναγιώτης Κεφαλίδης "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία" Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
|
|
-
10-05-2006, 00:04
|
-
Panagiotis Kefalidis
-
-

-
Μέλος από τις 09-05-2005
-
North America
-
Δημοσιεύσεις 1.204
-
-
|
Και για διορθώσω την ασυναρτησία (γιατί έτσι βγήκε) περί assembly, να πώ οτι το έφερα σαν παράδειγμα, για να σου δώσω να καταλάβεις ότι έχουν διαφορετική υλοποίηση σαν λειτουργικά συστήματα και αυτό ίσως σου φανεί περίεργο μέχρι να συνηθίσεις..Ότι θες βέβαια, ρίξε ποστ, εδώ είμαστε
Παναγιώτης Κεφαλίδης "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία" Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
|
|
-
10-05-2006, 22:05
|
-
Link3
-
-
-
Μέλος από τις 06-05-2006
-
No Man's Land
-
Δημοσιεύσεις 5
-
-
|
Φίλε pkefal, δυστυχώς δεν έχω κατεβεί ακόμα σε τόσο χαμηλό επίπεδο και απο assembly είχα μελετήσει, καθαρά εγκυκλοπαιδικά και για να αποκτήσω μια ιδέα, να δω "τι παίζει", μόνο για MS-DOS (θυμάμαι κατι interrupts, όπως το int 21h, που κάνουν ένα σωρό διαφορετικά πράγματα ανάλογα με τη τιμή κάποιων καταχωρητών). Έχω ακούσει όμως, ότι αυτο το scheme έχει αλλάξει πλέον στα Win32 και πλέον καλείς κανονικά API με εντολές όπως call, κ.α.
Αυτό που με ενόχλησε στό API των Windows είναι οι ασυνήθιστα (τουλάχιστον για την οχι ιδιαίτερα μεγάλη, εμπειρία μου απο το UNIX) πολλές παράμετροι αρκετών κλήσεων..
Έχω παίξει ελαφρά στο παρελθόν με το advapi32.dll για κάτι ρυθμίσεις με registry (RegOpenKeyExA, RegDeleteValueA, κ.α.), αλλά και με το user32, για κάτι κόλπα με την εμφάνιση παραθύρων (διαφάνεια..) και εκεί τα 'παιξα, καθώς π.χ. η UpdateLayeredWindow δέχεται, ούτε λίγο ούτε πολύ, 9 παραμέτρους.
Αντιλαμβάνομαι ότι έχεις δουλέψει προγραμματισμό σε περιβάλλον UNIX.. θα ξέρεις σίγουρα τη fork(), που δεν παίρνει καμία παράμετρο. Η αντίστοιχη διάβασα ότι είναι η CreateProcess(), που ωστόσο απαιτεί 10 παραμέτρους. o_O
Αντικειμενικά, τι σου φαίνεται πιο δομημένο, απο την ματιά ενός προγραμματιστή? (κάτι το οποίο δεν είμαι)..
Παρατηρώ ότι το Win32 API έχει συναρτήσεις για τα πάντα σχεδόν .. όλες αυτές είναι μέσα στον πυρήνα? Υποψιάζομαι πως όχι, μιας και τα Windows έχουν υβριδική υλοποίηση στον τομέα αυτό. Επηρεάζει όμως η παρουσία τόσων συναρτήσεων την σταθερότητα του συστήματος? Το γραφικό περιβάλλον είναι ενσωματωμένο στον πυρήνα? Ή υλοποιείται σαν εξωτερικό module? Το advapi32 και το user32 έχουν κλήσεις πυρήνα, η μόνο το kernel32?
Συγνώμη για τις πολλές απορίες, αλλα .. :)
Living In Nightmare's Kingdom...
|
|
-
10-05-2006, 23:16
|
-
10-05-2006, 23:18
|
-
11-05-2006, 02:19
|
-
Panagiotis Kefalidis
-
-

-
Μέλος από τις 09-05-2005
-
North America
-
Δημοσιεύσεις 1.204
-
-
|
Η CreateProcess μπορεί να παίρνει πολλές παραμέτρους, γενικώς πολλά API μπορεί να δέχονται πολλές παραμέτρους, το θέμα είναι οτί αυτό είναι καλό, όσο και αν σου φαίνεται αστειό..Είναι καλό, γιατί δεν χρειάζεται να καλέσεις 15 διαφορετικά API για να κάνεις set κάποιες τιμές, οι οποίες διαβάζονται απο άλλο API , ώστε να παίξει..Τις περνάς κατευθείαν..ασε που αυτές, μόνο μερικές είναι Mandatory για να δουλέψει το API που καλείς.. οι άλλες απλά περνάς null παράμετρο, ή empty string κλπ κλπ..
ΤΟ γραφικό περιβάλλον γίνεται expose μέσα απο μερικά dll..Για ποιο advanced καταστάσεις, θα πρέπει να καλείς το API απο τον driver της καρτας γραφικών που έχει το μηχάνημα επάνω, ή απο το DirectX εάν πρόκειται για εντολές γραφικών γενικώς..
Επίσης, να σου πώ ότι όχι, δεν είναι όλες μέσα στον πυρήνα, απλά πολλές απο αυτές "βγαινουν" απο το kernel32.dll ή το user32.dll ή το advapi32.dll..Πάνω κάτω, όλα απο αυτά θα τα βρείς.. έχουν μεταξύ τους dependencies οπότε δεν έχει νόημα να πούμε, οτι αυτό δεν καλεί το άλλο..Όσο για το γραφικό περιβάλλον.. ναι είναι ενσωματομένο, και αυτό είναι μια απο τις βλακίες τον Windows, αν και αλλάζει πάρα πολύ αυτό στα Vista..Πάντως ακολούθησε τις συμβουλές των παιδιών για τα βιβλία, σίγουρα θα σε βοηθήσουν, όπως επίσης και ο Mitsaras έχει δίκιο..ειναι νωρίς για να μπλέξεις με NativeAPI..
Παναγιώτης Κεφαλίδης "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία" Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
|
|
-
12-05-2006, 11:27
|
-
25-08-2006, 11:09
|
-
11-01-2007, 13:53
|
|
|
|