Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Νέος στο Windows API

Îåêßíçóå áðü ôï ìÝëïò Link3. Τελευταία δημοσίευση από το μέλος cap στις 11-01-2007, 13:53. Υπάρχουν 13 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-05-2006, 11:57 12427

    Νέος στο Windows API

    Χαιρετώ την παρέα..

    Γράφτηκα στο 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 12430 σε απάντηση της 12427

    Απ: Νέος στο Windows API

    Αρχικά δεν χρειάζεται να ασχοληθείς με το Windows API. Θα σου πρότεινα να διαλέξεις μια γλώσσα προγραμματισμού όπως για παράδειγμα C# ή VB.NET και να ασχοληθείς με αυτή. Σιγά-σιγά θα έρθεις σε επαφή με όλες αυτές τις τεχνολογίες που γνωρίζεις μόνο ονομαστικά. Smile [:)] Οι γλώσσες προγραμματισμού των Windows σου παρέχουν ένα σύνολο από βιβλιοθήκες μέσω των οποίων δουλεύεις πάνω στο σύστημα χωρίς να υπάρχει η ανάγκη να καταφύγεις στο WinAPI, εκτός βέβαια αν δεν υπάρχει αντίστοιχη βιβλιοθήκη, ωστόσο αυτές οι περιπτώσεις δεν εμφανίζονται συχνά.


    Vir prudens non contra ventum mingit
  •  09-05-2006, 13:16 12436 σε απάντηση της 12427

    Απ: Νέος στο Windows API

    Πληροφορίες για το 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 12463 σε απάντηση της 12436

    Απ: Νέος στο Windows API

    Με τράβηξε το API για τον ίδιο λόγο που καταπιάστηκα με τα UNIX Systel Calls.. απευθείας διασύνδεση με το λειτουργικό σύστημα. Φυσικά, όπως είπα και παραπάνω, τα Systel Calls του UNIX είναι λίγα (και καλά) ενω το Win32 API περιλαμβάνει, απο την άποψη που έχω σχηματίσει, μερικές χιλιάδες κλήσεις.

    Τι είδους βιβλιοθήκες μου παρέχουν οι C# και η VB.net? Αλήθεια, ποια η διαφορά του τελευταίου απο την κλασσική VB6 ?

    Ευχαριστώ και για την άμεση ανταπόκριση :)
    Living In Nightmare's Kingdom...
  •  09-05-2006, 21:25 12464 σε απάντηση της 12463

    Απ: Νέος στο Windows API

    Οι βιβλιοθήκες του .NET είναι αυτό που ονομάζουμε ".NET Framework". Μπορείς να ρίξεις μια ματιά εδώ: http://msdn2.microsoft.com/en-us/library/k1s94fta(en-US,VS.80).aspx

     


    Vir prudens non contra ventum mingit
  •  09-05-2006, 23:56 12473 σε απάντηση της 12427

    Απ: Νέος στο Windows API

    Όπως διαπίστωσες υπάρχουν μεγάλες διαφορές με τα 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 12475 σε απάντηση της 12473

    Απ: Νέος στο Windows API

    Και για διορθώσω την ασυναρτησία (γιατί έτσι βγήκε) περί assembly, να πώ οτι το έφερα σαν παράδειγμα, για να σου δώσω να καταλάβεις ότι έχουν διαφορετική υλοποίηση σαν λειτουργικά συστήματα και αυτό ίσως σου φανεί περίεργο μέχρι να συνηθίσεις..Ότι θες βέβαια, ρίξε ποστ, εδώ είμαστε Smile [:)]
    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  10-05-2006, 22:05 12510 σε απάντηση της 12475

    Απ: Νέος στο Windows API

    Φίλε 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 12511 σε απάντηση της 12427

    Απ: Νέος στο Windows API

    Δε νομίζω να καταφέρεις να δουλέψεις απ' ευθείας με τον Kernel. Για να το καταφέρεις, θα πρέπει να χρησιμοποιήσεις το Native API των windows, το οποίο χρησιμοποιείς εμμέσως με τη χρήση του win api.

    Ωστόσο, είναι πολύ δύσκολο να βρεις κατάλληλο documentation για το Native API... Ρίξε μια ματιά εδώ αν θέλεις: http://www.sysinternals.com/Information/NativeApi.html

    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  10-05-2006, 23:18 12512 σε απάντηση της 12510

    Απ: Νέος στο Windows API

    Αγαπητέ Link3, καλά κάνεις και ψάχνεσαι. Ενα κομμάτι γνώσης του καλού software engineering, είναι η γνώση του λειτουργικού επάνω στο οποίο τρέχουν οι εφαρμογές που φτιάχνει.

    Για να μελετήσεις λοιπόν τα Windows, πρέπει να περάσεις απο την αρχιτεκτονική τους. Για αυτό το σκοπό σου προτείνω την βίβλο που ονομάζεται 'Windows Internals' των συγγραφέων Russinovich & Solomon (η παλαιότερη έκδοση ονομάζεται 'Inside Microsoft Windows 2000' 3rd Edition).

    Για μία γρήγορη και συμπαγή εισαγωγή στο Win32 API σου προτείνω το 'http://www.winprog.org/tutorial/'.

    Επειτα εάν θέλεις να ασχοληθείς ποιο πολύ με το Win32 API, βρές ένα βιβλίο για native windows programming όπως 'Programming Windows API' του Charles Petzold, 'Windows System Programming' του Johnson M. Hart.

    Και μην ξεχνάς και το MSDN που έχει τα πάντα, και κυρίως παλαιότερες δημισιεύσεις στο 'http://msdn.microsoft.com/msdnmag/'

  •  11-05-2006, 02:19 12515 σε απάντηση της 12427

    Απ: Νέος στο Windows API

    Η 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 12583 σε απάντηση της 12515

    Απ: Νέος στο Windows API

    Μαλιστα... ευχαριστώ πολύ παιδιά.. Οι συμβουλές σας ήταν πολύτιμες :)
    Living In Nightmare's Kingdom...
  •  25-08-2006, 11:09 15874 σε απάντηση της 12427

    Απ: Νέος στο Windows API

    Αν και παρα πολυ καθυστερημενα μιας και εχτες εγινα μελος υπαρχει και το api guide : http://www.allapi.net/agnet/apiguide.shtml

    το οποιο ειναι παρα πολυ καλο για τους καινουργιους στο api. Εγω απο αυτο εμαθα api


    Burning The Fire........
  •  11-01-2007, 13:53 23374 σε απάντηση της 12427

    Απ: Νέος στο Windows API

    Αλλάζω το status του συγκεκριμένου θέματος μια και φαίνεται οτι έχει πλέον απαντηθεί.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems