Τι είναι το Windows API. Τι είναι το Win32: βασικές έννοιες και απλές μέθοδοι για την εξάλειψη σφαλμάτων που εμφανίζονται

Εργαλείο 07.07.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Όλα τα προγράμματα Win32 έχουν παρόμοια διεπαφή: ένα παράθυρο με γραμμή τίτλου, περιγράμματα, μενού συστήματος, κουμπιά κλεισίματος, ελαχιστοποίησης, μεγιστοποίησης/επαναφοράς και μια περιοχή εργασίας. Μπορείτε να μετακινήσετε το παράθυρο με το ποντίκι σύροντας τη γραμμή τίτλου και μπορείτε να αλλάξετε το μέγεθός του μετακινώντας τα περιγράμματα. Η περιοχή εργασίας συχνά περιέχει μενού και γραμμές εργαλείων. Το λειτουργικό σύστημα λειτουργεί με τον πόρο μέσω του αντικειμένου του και ο χρήστης εργάζεται με τα παράθυρα.

    Εφαρμογές

    Εργασία με παράθυρο

  • Εργασία σε παράθυρο

Εξοπλισμός– Λογισμικό εγκατεστημένο με το λειτουργικό σύστημα. Περιλαμβάνει ένα παράθυρο εργασίας - επιφάνεια εργασίας: κουμπί Έναρξη, Ο Υπολογιστής μου, Κάδος Ανακύκλωσης, Τα έγγραφά μου... Εγκαθίσταται επίσης ένα επιπλέον σύνολο προγραμμάτων - σημειωματάριο, ζωγραφική, εξερευνητής, εύρεση, βοηθητικά προγράμματα (σάρωση δίσκων, ανασυγκρότηση, πληροφορίες συστήματος), . ..

    Εργασία με εξοπλισμό. Προφίλ εξοπλισμού.

ΕλεγχοςΠίνακαςΣυσκευήΔιευθυντής(Διαχείριση συσκευής)

Σκηνικά θέατρου (γενικά, πρόγραμμα οδήγησης, πόροι),προσθέτω , διαγράφω .

ΕλεγχοςΠίνακαςΟδηγός εγκατάστασης υλικού

Όλες οι συσκευές χωρίζονται σε κληρονομούμενες (δεν αναγνωρίζονται αυτόματα), το PnP δεν λειτουργεί πλήρως, το PnP λειτουργεί πλήρως. Η συσκευή, το BIOS και το λειτουργικό σύστημα πρέπει να υποστηρίζουν PnP, διαφορετικά η συσκευή δεν θα είναι PnP.

ControlPanelΕγκατάσταση εκτυπωτή

Πρώτα εγκαταστήστε το λογισμικό και μετά τον εκτυπωτή ή εγκαταστήστε το πρόγραμμα οδήγησης χωρίς την παρουσία του εκτυπωτή.

Πίνακας ΕλέγχουΣύστημαΠροφίλ υλικού

Τα προφίλ υλικού βοηθούν στην επιτάχυνση της εργασίας σας. Εφαρμόζεται μετά την επανεκκίνηση.

    Ρυθμίσεις χρήστη περιβάλλοντος Windows. Προφίλ χρηστών.

Πίνακας ΕλέγχουΚωδικοί πρόσβασης

Μπορείτε να ορίσετε ένα προφίλ για όλους τους χρήστες

Πίνακας ΕλέγχουΧρήστες

Το προφίλ χρήστη περιλαμβάνει:

  • Αγαπημένα

    Ηχητική ζώνη ταινίας

    Γλώσσα και διεθνή πρότυπα

Μονάδα μεγέθους (σημείο) – σημείο – 1/32 ίντσα, ~0,36 mm. Οι γραμματοσειρές από την ίδια οικογένεια διαφέρουν σε ορισμένες παραμέτρους. Είναι αναλογικά και δυσανάλογα. Kerning– Τοποθέτηση γραμμάτων έτσι ώστε η απόσταση μεταξύ τους να φαίνεται ίση.

εφέ – Τολμηρός, Πλάγια γραφή, Υπογραμμισμένο , Εξαλείφω...

Τύποι γραμματοσειρών Microsoft:

    Bitmap (raster) FON

    Vector FON (Χρησιμοποιεί γεωμετρικές μονάδες)

    TrueTypeTTF (Χρησιμοποιούνται μαθηματικοί τύποι)

Εκτός:

    Το PostScript λειτουργεί γρήγορα, αλλά κάθε παράμετρος απαιτεί το δικό της ράστερ (Mac, Adobe)

  1. Ρύθμιση της απόδοσης του περιβάλλοντος των Windows.

      Σύστημα βίντεο

Επίπεδο χρήσης επιτάχυνσης υλικού

Ανάλυση οθόνης

Σχέδιο στην επιφάνεια εργασίας, διάφορα εφέ

      Σύστημα αρχείων

Πίνακας ΕλέγχουΣύστημαΑπόδοση

Διαμόρφωση της προσωρινής μνήμης για ανάγνωση και εγγραφή.

Ονόματα σε μορφή 8.3

Ανασυγκρότηση δίσκου

      Σφραγίδα

Πίνακας ΕλέγχουΕκτυπωτής

Εκτυπώστε μετά τη φόρτωση μιας σελίδας ή ολόκληρου του εγγράφου

      Εικονική μνήμη

Πίνακας ΕλέγχουΣύστημαΑπόδοση

Το αρχείο σελιδοποίησης είναι για μνήμη που έχει εκτοπιστεί από τη μνήμη RAM. Η αυτόματη επιλογή εξαρτάται από την ποσότητα του ελεύθερου χώρου.

  1. Χαρακτηριστικά εφαρμογών. Υποστήριξη για εφαρμογές Win32.

Win32,Win16,DOS16 – τρεις τύποι εφαρμογών. Όλα τα προγράμματα Win32 εκτελούνται σε μία εικονική μηχανή.

Εφαρμογές Win32:

Μορφή EXE

Πρότυπο API (τυπικά εργαλεία διεπαφής και λειτουργίες πυρήνα)

Υποστήριξη δικτύου

Υποστήριξη για τον μηχανισμό OLE (αποθήκευση αντικειμένων από διαφορετικές εφαρμογές σε ένα έγγραφο, το OLE είναι συνδεδεμένο με τη δομή του καταλόγου, επομένως, κακώς φορητό)

Υποστήριξη P&P

Τυπική εγκατάσταση και αφαίρεση

Windows API - ένα σύνολο λειτουργιών του λειτουργικού συστήματος

Η συντομογραφία API φαίνεται πολύ μυστηριώδης και μάλιστα τρομακτική σε πολλούς αρχάριους προγραμματιστές. Στην πραγματικότητα, μια διεπαφή προγραμματισμού εφαρμογών (API) είναι μόνο ένα έτοιμο σύνολο λειτουργιών που μπορούν να χρησιμοποιήσουν οι προγραμματιστές εφαρμογών. Γενικά, αυτή η έννοια είναι ισοδύναμη με αυτό που παλαιότερα ονομαζόταν πιο συχνά βιβλιοθήκη υπορουτίνων. Ωστόσο, το API συνήθως αναφέρεται σε μια ειδική κατηγορία τέτοιων βιβλιοθηκών.

Κατά την ανάπτυξη σχεδόν κάθε αρκετά περίπλοκης εφαρμογής (MyApplication) για τον τελικό χρήστη, σχηματίζεται ένα σύνολο συγκεκριμένων εσωτερικών λειτουργιών που χρησιμοποιούνται για την υλοποίηση αυτού του συγκεκριμένου προγράμματος, το οποίο ονομάζεται MyApplication API. Ωστόσο, συχνά αποδεικνύεται ότι αυτές οι λειτουργίες μπορούν να χρησιμοποιηθούν αποτελεσματικά για τη δημιουργία άλλων εφαρμογών, μεταξύ άλλων από άλλους προγραμματιστές. Σε αυτήν την περίπτωση, οι συγγραφείς, με βάση τη στρατηγική για την προώθηση του προϊόντος τους, πρέπει να αποφασίσουν το ερώτημα: ανοίγουν πρόσβαση σε αυτό το σύνολο για εξωτερικούς χρήστες ή όχι; Εάν η απάντηση είναι ναι, η φράση «Το πακέτο περιλαμβάνει ένα ανοιχτό σύνολο λειτουργιών API» εμφανίζεται στην περιγραφή του πακέτου λογισμικού ως θετικό χαρακτηριστικό (αλλά μερικές φορές για επιπλέον χρήματα).

Έτσι, τις περισσότερες φορές ένα API αναφέρεται σε ένα σύνολο λειτουργιών που αποτελούν μέρος μιας εφαρμογής, αλλά είναι επίσης διαθέσιμες για χρήση σε άλλα προγράμματα. Για παράδειγμα, το Excel, εκτός από τη διεπαφή τελικού χρήστη, διαθέτει ένα σύνολο συναρτήσεων API του Excel που μπορούν να χρησιμοποιηθούν, ειδικότερα, κατά τη δημιουργία εφαρμογών με χρήση VB.

Αντίστοιχα, το API των Windows είναι ένα σύνολο λειτουργιών που αποτελεί μέρος του ίδιου του λειτουργικού συστήματος και ταυτόχρονα είναι προσβάσιμο σε οποιαδήποτε άλλη εφαρμογή, συμπεριλαμβανομένων εκείνων που έχουν γραφτεί με χρήση VB. Από αυτή την άποψη, η αναλογία με το σετ διακοπής συστήματος BIOS/DOS, που είναι στην πραγματικότητα ένα API DOS, είναι αρκετά δικαιολογημένη.

Η διαφορά είναι ότι το εύρος των λειτουργιών API των Windows, αφενός, είναι πολύ ευρύτερο σε σύγκριση με το DOS και, αφετέρου, δεν περιλαμβάνει πολλά από τα εργαλεία για την άμεση διαχείριση των πόρων του υπολογιστή που ήταν διαθέσιμα στους προγραμματιστές στο προηγούμενο OS. Επιπλέον, οι κλήσεις στο API των Windows εκτελούνται χρησιμοποιώντας συνηθισμένες διαδικαστικές κλήσεις και οι κλήσεις προς τις συναρτήσεις DOS πραγματοποιούνται μέσω μιας ειδικής εντολής επεξεργαστή που ονομάζεται Διακοπή.

Γιατί χρειαζόμαστε το Win API για προγραμματιστές VB;

Παρά το γεγονός ότι η VB έχει μια τεράστια ποικιλία λειτουργιών, στη διαδικασία περισσότερο ή λιγότερο σοβαρής ανάπτυξης ανακαλύπτεται ότι οι δυνατότητές τους συχνά δεν επαρκούν για την επίλυση των απαραίτητων προβλημάτων. Ταυτόχρονα, οι αρχάριοι προγραμματιστές συχνά αρχίζουν να παραπονιούνται για τις ελλείψεις της VB και σκέφτονται να αλλάξουν εργαλεία, χωρίς να υποψιάζονται ότι ο υπολογιστής τους έχει ένα τεράστιο σύνολο εργαλείων και απλά πρέπει να ξέρουν πώς να τα χρησιμοποιούν.

Κατά τη γνωριμία με το Win API, ανακαλύπτεται ότι πολλές ενσωματωμένες συναρτήσεις VB δεν είναι παρά κλήσεις στις αντίστοιχες διαδικασίες συστήματος, αλλά υλοποιούνται μόνο με τη μορφή της σύνταξης μιας δεδομένης γλώσσας. Λαμβάνοντας αυτό υπόψη, η ανάγκη χρήσης του API καθορίζεται από τις ακόλουθες επιλογές:

  1. Συναρτήσεις API που υλοποιούνται πλήρως ως ενσωματωμένες συναρτήσεις VB.
  2. Ωστόσο, μερικές φορές σε αυτήν την περίπτωση είναι χρήσιμο να μεταβείτε στη χρήση του API, καθώς αυτό μπορεί μερικές φορές να βελτιώσει σημαντικά την απόδοση (ιδίως λόγω της απουσίας περιττών μετασχηματισμών των παραμέτρων που έχουν περάσει).
  3. Οι ενσωματωμένες συναρτήσεις VB υλοποιούν μόνο μια ειδική περίπτωση της αντίστοιχης συνάρτησης API.

Θα πρέπει επίσης να τονιστεί ότι ορισμένες λειτουργίες API (το μερίδιό τους στο Win API είναι πολύ μικρό) δεν μπορούν να κληθούν από προγράμματα VB λόγω ορισμένων γλωσσικών περιορισμών, για παράδειγμα, λόγω αδυναμίας εργασίας με διευθύνσεις μνήμης. Αλλά σε ορισμένες περιπτώσεις, οι μη τετριμμένες τεχνικές προγραμματισμού μπορούν να βοηθήσουν (ιδίως στην περίπτωση των ίδιων διευθύνσεων).

Η προσωπική άποψη του συγγραφέα είναι η εξής - αντί να επεκτείνει τις ενσωματωμένες λειτουργίες της VB από έκδοση σε έκδοση, θα πρέπει να της δοθεί μια καλή περιγραφή των πιο δημοφιλών λειτουργιών API. Ταυτόχρονα, θα ήθελα να συμβουλεύσω τους προγραμματιστές να μην περιμένουν να εμφανιστεί μια νέα έκδοση του εργαλείου με διευρυμένες λειτουργίες, αλλά να ρίξουν μια πιο προσεκτική ματιά στη σύνθεση του υπάρχοντος Win API - είναι πιθανό ότι οι δυνατότητες που χρειάζεστε θα μπορούσε να είχε εφαρμοστεί ήδη στην έκδοση VB 1.0, που κυκλοφόρησε το 1991.

Πώς να μάθετε το Win API

Δεν είναι τόσο απλή ερώτηση, αν σκεφτεί κανείς ότι ο αριθμός των λειτουργιών του Win32 API υπολογίζεται σε περίπου 10 χιλιάδες (κανείς δεν γνωρίζει τον ακριβή αριθμό, ούτε καν η Microsoft).

Το VB (εκδόσεις 4-6) περιλαμβάνει ένα αρχείο που περιγράφει δηλώσεις Win API - WIN32API.TXT (θα σας πούμε περισσότερα για τη χρήση του αργότερα). Αλλά, πρώτον, με τη βοήθειά του μπορείτε να λάβετε πληροφορίες σχετικά με το σκοπό μιας συγκεκριμένης συνάρτησης και τις παραμέτρους της μόνο από τα μνημονικά ονόματα που χρησιμοποιούνται και, δεύτερον, η λίστα των συναρτήσεων σε αυτό το αρχείο απέχει πολύ από το να είναι πλήρης. Κάποτε (πριν από επτά χρόνια), το VB 3.0 είχε ειδικά αρχεία βοήθειας που περιγράφουν τις λειτουργίες του Win16 API. Ωστόσο, ήδη στην έκδοση 4.0 αυτές οι χρήσιμες πληροφορίες με μια βολική διεπαφή εξαφανίστηκαν.

Μπορείτε να βρείτε αναλυτικές πληροφορίες σχετικά με το Win32 API στη βοήθεια του Platform Software Development Kit, η οποία περιλαμβάνεται στα CD της βιβλιοθήκης MSDN που περιλαμβάνονται στις VB 5.0 και 6.0 Enterprise Edition και Office 2000 Developer Edition. Ωστόσο, το να βρεις εκεί τις απαραίτητες πληροφορίες και να τις καταλάβεις δεν είναι καθόλου εύκολο. Για να μην πω ότι όλες οι περιγραφές εκεί δίνονται σε σχέση με τη γλώσσα C.

Τα βιβλία του διάσημου Αμερικανού ειδικού Daniel Appleman είναι γενικά αναγνωρισμένα στον κόσμο για την εκμάθηση προγραμματισμού API στο περιβάλλον VB. Το Dan Appleman's Visual Basic Programmer's Guide to the Windows API series (για Win16, Win32 και διάφορες εκδόσεις της VB) είναι ένα από τα βιβλία με τις μεγαλύτερες πωλήσεις για προγραμματιστές VB από το 1993. Το βιβλίο Dan Appleman’s VB 5.0 Programmer’s Guide to the Win32 API, που κυκλοφόρησε το 1997, έφερε στον συγγραφέα από τις ΗΠΑ ένας φίλος που το βρήκε στο πρώτο βιβλιοπωλείο μιας μικρής επαρχιακής πόλης.

Αυτό το βιβλίο έχει περισσότερες από 1.500 σελίδες και καλύπτει γενικές τεχνικές προγραμματισμού API σε VB, καθώς και περισσότερες από 900 λειτουργίες. Το CD που περιλαμβάνεται περιέχει το πλήρες κείμενο του βιβλίου και όλα τα παραδείγματα προγραμμάτων, καθώς και πολλά επιπλέον κεφάλαια που δεν περιλαμβάνονται στην έντυπη έκδοση. Το 1999, ο Dan Appleman κυκλοφόρησε ένα νέο βιβλίο, το Win32 API Puzzle Book and Tutorial for Visual Basic Programmers του Dan Appleman, το οποίο περιλαμβάνει πληροφορίες για άλλες 7.600 λειτουργίες (αν και όχι τόσο εκτεταμένες).

Win API και Dynamic Link Library (DLL)

Το σύνολο Win API υλοποιείται με τη μορφή δυναμικών DLL. Στη συνέχεια, θα μιλήσουμε πραγματικά για την τεχνολογία χρήσης DLL στο περιβάλλον VB χρησιμοποιώντας το παράδειγμα των βιβλιοθηκών που περιλαμβάνονται στο Win API. Ωστόσο, όταν μιλάμε για DLL, πρέπει να επισημάνουμε μερικά σημαντικά σημεία.

Στην περίπτωση αυτή, με τον όρο DLL εννοούμε την παραδοσιακή έκδοση των δυαδικών δυναμικών βιβλιοθηκών, οι οποίες παρέχουν στις εφαρμογές άμεση πρόσβαση στις απαραίτητες διαδικασίες - υπορουτίνες ή συναρτήσεις (με τον ίδιο τρόπο που συμβαίνει όταν καλούν διαδικασίες μέσα σε ένα έργο VB). Τέτοιες βιβλιοθήκες μπορούν να δημιουργηθούν χρησιμοποιώντας διαφορετικά εργαλεία: VC++, Delphi, Fortran, εκτός από το VB (ας δούμε τι εμφανίζεται στην έκδοση 7.0) - το τελευταίο μπορεί να δημιουργήσει μόνο ActiveX DLL, στα οποία έχει πρόσβαση μέσω της διεπαφής OLE Automation.

Συνήθως τα αρχεία δυναμικής βιβλιοθήκης έχουν την επέκταση .DLL, αλλά αυτό δεν είναι καθόλου απαραίτητο (για το Win16 χρησιμοποιήθηκε συχνά η επέκταση .EXE). Τα προγράμματα οδήγησης εξωτερικών συσκευών ορίζονται χρησιμοποιώντας .DRV.

Όπως έχουμε ήδη σημειώσει, είναι αρκετά δύσκολο να προσδιοριστεί ο ακριβής αριθμός των λειτουργιών API των Windows και τα αρχεία που τις περιέχουν, αλλά βρίσκονται όλα στον κατάλογο του συστήματος. Από αυτή την άποψη, είναι καλύτερο να επισημάνουμε τη σύνθεση των βιβλιοθηκών που περιλαμβάνονται στον πυρήνα του λειτουργικού συστήματος και τις κύριες βιβλιοθήκες με βασικές πρόσθετες λειτουργίες.

Και τώρα μερικές συμβουλές.

Συμβουλή 1. Βεβαιωθείτε ότι η διαφήμισή σας DL έχει μορφοποιηθεί σωστά L-διαδικασίες

Η ίδια η κλήση σε διαδικασίες DLL σε ένα πρόγραμμα μοιάζει ακριβώς με τις «κανονικές» διαδικασίες της Visual Basic, για παράδειγμα:

Κλήση DllName ([λίστα επιχειρημάτων])

Ωστόσο, για να χρησιμοποιήσετε εξωτερικές συναρτήσεις DLL (συμπεριλαμβανομένου του Win API), πρέπει να δηλωθούν στο πρόγραμμα χρησιμοποιώντας τη δήλωση Declare, η οποία μοιάζει με αυτό:

Δήλωση Sub LibProcedureName _ “LibraryName” _ [([ArgumentList])]

Δήλωση συνάρτησης FunctionName _ Lib “LibraryName” _ [([ArgumentList])]

Εδώ, τα προαιρετικά στοιχεία του τελεστή εμφανίζονται σε αγκύλες, οι εκφράσεις των μεταβλητών είναι με πλάγιους χαρακτήρες και οι υπόλοιπες λέξεις είναι λέξεις-κλειδιά. Το σύστημα βοήθειας δίνει μια αρκετά καλή περιγραφή της σύνταξης του χειριστή, οπότε προς το παρόν θα σημειώσουμε μόνο μερικά σημεία.

Οι δηλώσεις εξωτερικών λειτουργιών θα πρέπει να τοποθετούνται στην ενότητα Γενικές δηλώσεις της ενότητας. Εάν το τοποθετήσετε σε μια ενότητα φόρμας, τότε πρέπει να καθορίσετε την Ιδιωτική λέξη-κλειδί (αυτή η δήλωση θα είναι διαθέσιμη μόνο εντός αυτής της ενότητας) - αυτός είναι ένας περιορισμός για όλες τις διαδικασίες της ενότητας φόρμας.

Το σύνολο Win32 API υλοποιείται μόνο με τη μορφή συναρτήσεων (το Win16 API είχε πολλές υπο-ρουτίνες). Ως επί το πλείστον, πρόκειται για συναρτήσεις τύπου Long, οι οποίες τις περισσότερες φορές επιστρέφουν τον κωδικό ολοκλήρωσης της λειτουργίας.

Ο χειριστής Declare εμφανίστηκε στο MS Basic την εποχή του DOS και χρησιμοποιήθηκε επίσης για τη δήλωση εσωτερικών διαδικασιών έργου. Στη Visual Basic αυτό δεν απαιτείται, καθώς η δήλωση των εσωτερικών διαδικασιών είναι αυτόματα δήλωση δευτερεύουσας ή συνάρτησης τους. Σε σύγκριση με το Basic/DOS, η νέα περιγραφή πρέπει να υποδεικνύει το όνομα του αρχείου της βιβλιοθήκης όπου βρίσκεται η απαιτούμενη διαδικασία. Οι βιβλιοθήκες Wip API βρίσκονται στον κατάλογο συστήματος των Windows, επομένως αρκεί να δώσετε μόνο το όνομα του αρχείου. Εάν έχετε πρόσβαση σε ένα DLL που βρίσκεται σε τυχαία τοποθεσία, πρέπει να σημειώσετε την πλήρη διαδρομή σε αυτό το αρχείο.

Η περιγραφή της δήλωσης Declare συνήθως καταλαμβάνει πολύ χώρο και δεν χωράει σε μία γραμμή στο παράθυρο κώδικα. Ως εκ τούτου, συνιστούμε να τηρείτε ένα συγκεκριμένο σχήμα αλλαγής γραμμής κατά τη σύνταξη εφαρμογών, για παράδειγμα:

Δηλώστε τη συνάρτηση GetTempPath _ Lib "kernel32" Ψευδώνυμο "GetTempPathA" _ (ByVal nBufferLength As Long, _ ByVal lpBuffer As String) As Long

Σε αυτή την περίπτωση, όλα τα κύρια στοιχεία της περιγραφής τοποθετούνται σε διαφορετικές γραμμές και επομένως είναι ευανάγνωστα.

Συμβουλή 2: Να είστε ιδιαίτερα προσεκτικοί όταν εργάζεστε με λειτουργίες DLL

Η χρήση του Win API και διάφορων λειτουργιών DLL επεκτείνει σημαντικά τη λειτουργικότητα του VB και συχνά βελτιώνει την απόδοση του προγράμματος. Ωστόσο, το τίμημα για αυτό είναι ο κίνδυνος μείωσης της αξιοπιστίας της εφαρμογής, ειδικά κατά την αποσφαλμάτωση της.

Ένα από τα σημαντικότερα πλεονεκτήματα του περιβάλλοντος VB είναι η αξιοπιστία της διαδικασίας ανάπτυξης προγράμματος: λειτουργώντας υπό τον έλεγχο ενός διερμηνέα, ο κώδικας του προγράμματος θεωρητικά δεν μπορεί να διαταράξει τη λειτουργία των Windows και της ίδιας της VB. Ο προγραμματιστής μπορεί να μην είναι πολύ προσεκτικός σχετικά με την ορθότητα της μετάδοσης παραμέτρων στις καλούμενες συναρτήσεις - τέτοια σφάλματα θα εντοπιστούν εύκολα από τον ίδιο τον διερμηνέα είτε κατά τη διαδικασία μετάφρασης του κώδικα είτε κατά την εκτέλεσή του. Στην πιο δυσάρεστη περίπτωση, η λειτουργία επεξεργασίας απλώς θα διακοπεί, με ένδειξη του πού και γιατί παρουσιάστηκε το σφάλμα.

Η χρήση λειτουργιών API των Windows ή άλλων DLL καταργεί απευθείας αυτόν τον έλεγχο στη μεταφορά δεδομένων και στη διαδικασία εκτέλεσης κώδικα εκτός του περιβάλλοντος VB. Επομένως, ένα σφάλμα στην πρόσβαση σε εξωτερικές λειτουργίες μπορεί να οδηγήσει σε αλειτουργία τόσο της VB όσο και του λειτουργικού συστήματος. Αυτό ισχύει ιδιαίτερα στο στάδιο της ανάπτυξης του προγράμματος, όταν η παρουσία σφαλμάτων είναι απολύτως φυσική. Έτσι, χρησιμοποιώντας τις ευρύτερες δυνατότητες των λειτουργιών του βασικού στρώματος του συστήματος, ο προγραμματιστής αναλαμβάνει την ευθύνη για τη σωστή χρήση τους.

Το πρόβλημα επιδεινώνεται περαιτέρω από το γεγονός ότι διαφορετικές γλώσσες προγραμματισμού χρησιμοποιούν διαφορετικούς τρόπους μετάδοσης παραμέτρων μεταξύ των διαδικασιών. (Ακριβέστερα, χρησιμοποιούνται διαφορετικές μέθοδοι μετάβασης από προεπιλογή, καθώς πολλές γλώσσες μπορούν να υποστηρίξουν περισσότερες από μία.) Τα Win API υλοποιούνται σε C/C++ και χρησιμοποιούν συμβάσεις μετάδοσης παραμέτρων C/C++ που διαφέρουν από τη συνηθισμένη έκδοση VB.

Από αυτή την άποψη, πρέπει να σημειωθεί ότι η εμφάνιση αναλόγων λειτουργιών API ενσωματωμένων στο VB δικαιολογείται ακριβώς από την προσαρμογή του τελευταίου στη σύνταξη VB και την εφαρμογή ενός κατάλληλου μηχανισμού ελέγχου ανταλλαγής δεδομένων. Ας σημειώσουμε επίσης ότι στο στάδιο του πειραματικού εντοπισμού σφαλμάτων της εφαρμογής κατά τη δημιουργία μιας εκτελέσιμης μονάδας, είναι προτιμότερο να χρησιμοποιείτε την επιλογή μεταγλώττισης κώδικα P αντί για τον Native Code (κωδικός μηχανής). Στην πρώτη περίπτωση, το πρόγραμμα θα εκτελείται υπό τον έλεγχο ενός διερμηνέα - πιο αργό σε σύγκριση με τον κώδικα μηχανής, αλλά πιο αξιόπιστο από την άποψη πιθανών λανθασμένων επιπτώσεων στο λειτουργικό σύστημα και παρέχοντας μια πιο βολική λειτουργία για τον εντοπισμό πιθανών σφαλμάτων.

Συμβουλή 3: Οι δέκα συμβουλές του Dan Appleman για ισχυρό προγραμματισμό API στη VB

Η χρήση της συνάρτησης API απαιτεί πιο προσεκτικό προγραμματισμό χρησιμοποιώντας κάποιες λιγότερο γνωστές τεχνικές κλήσης διαδικασίας (σε σύγκριση με τη VB). Θα συνεχίσουμε να αντιμετωπίζουμε αυτά τα ζητήματα στη συνέχεια. Και τώρα παρουσιάζουμε μια περίληψη των συμβουλών που διατύπωσε ο Dan Appleman σχετικά με αυτό το θέμα (η πρώτη τους έκδοση εμφανίστηκε το 1993) με μερικές από τις προσθήκες και τα σχόλιά μας.

1. Θυμηθείτε το ByVal.Το πιο συνηθισμένο λάθος που γίνεται κατά την πρόσβαση σε λειτουργίες API και DLL είναι η εσφαλμένη χρήση της λέξης-κλειδιού ByVal: είτε ξεχνούν να τη βάλουν είτε, αντίθετα, τη βάζουν όταν δεν χρειάζεται.

Αυτά τα παραδείγματα δείχνουν την επίδραση του τελεστή ByVal στη μετάδοση παραμέτρων

Τύπος παραμέτρου Με την ByVal Χωρίς ByVal
Ακέραιος αριθμός Ένας ακέραιος 16-bit ωθείται στη στοίβα Η διεύθυνση 32 bit ενός ακέραιου αριθμού 16 bit προωθείται στη στοίβα
Μακρύς Ένας ακέραιος αριθμός 32 bit ωθείται στη στοίβα Η διεύθυνση 32-bit ενός ακέραιου αριθμού 32-bit προωθείται στη στοίβα
Σειρά Η συμβολοσειρά μετατρέπεται στη μορφή που χρησιμοποιείται στο C (δεδομένα και ένα τερματικό null byte). Η διεύθυνση 32-bit της νέας γραμμής προωθείται στη στοίβα Η λαβή VB στη συμβολοσειρά ωθείται στη στοίβα. (Τέτοιοι χειρισμοί δεν χρησιμοποιούνται ποτέ από το ίδιο το API των Windows και αναγνωρίζονται μόνο σε DLL που έχουν εφαρμοστεί ειδικά για VB.)

Θα πρέπει να υπενθυμίσουμε εδώ ότι η μετάδοση παραμέτρων σε οποιοδήποτε σύστημα προγραμματισμού, συμπεριλαμβανομένου του VB, πραγματοποιείται με δύο βασικούς τρόπους: με αναφορά (ByRef) ή με τιμή (ByVal). Στην πρώτη περίπτωση, μεταβιβάζεται η διεύθυνση της μεταβλητής (αυτή η επιλογή χρησιμοποιείται από προεπιλογή στο VB), στη δεύτερη - η τιμή της. Η θεμελιώδης διαφορά είναι ότι χρησιμοποιώντας μια αναφορά, η αλλαγμένη τιμή της παραμέτρου που πέρασε επιστρέφεται στο καλούν πρόγραμμα.

Για να το κατανοήσετε αυτό, κάντε ένα πείραμα χρησιμοποιώντας τα ακόλουθα προγράμματα:

Dim v Ως ακέραιος v = 2 Κλήση MyProc(v) MsgBox “v = “ & v Sub MyProc (v Ως ακέραιος) v = v + 1 End Sub

Όταν εκτελείτε αυτό το παράδειγμα, θα λάβετε ένα μήνυμα με την τιμή της μεταβλητής ίση με 3. Το γεγονός είναι ότι σε αυτήν την περίπτωση η διεύθυνση της μεταβλητής v, που δημιουργήθηκε φυσικά στο πρόγραμμα κλήσης, μεταβιβάζεται στην υπορουτίνα MyProc. Τώρα αλλάξτε την περιγραφή της διαδικασίας σε

Sub MyProc (ByVal v As Integer)

Ως αποτέλεσμα, κατά την εκτέλεση της δοκιμής, θα λάβετε v = 2, επειδή μόνο η αρχική τιμή της μεταβλητής μεταβιβάζεται στη διαδικασία - το αποτέλεσμα των πράξεων που εκτελούνται με αυτήν δεν επιστρέφεται στο πρόγραμμα κλήσης. Η λειτουργία μεταφοράς ανά τιμή μπορεί επίσης να αλλάξει χρησιμοποιώντας τον χειριστή κλήσης ως εξής:

Sub MyProc (v As Integer) ... Καλέστε MyProc((v)) ‘ (v) - οι παρενθέσεις υποδεικνύουν τη λειτουργία μεταφοράς ανά τιμή.

Ωστόσο, κατά την πρόσβαση σε εσωτερικές διαδικασίες VB, η χρήση της λέξης-κλειδιού ByVal στη δήλωση κλήσης απαγορεύεται - αντ' αυτού χρησιμοποιούνται παρενθέσεις. Υπάρχει εξήγηση για αυτό.

Στην κλασική περίπτωση (C, Fortran, Pascal), η διαφορά μεταξύ των λειτουργιών ByRef και ByVal εξαρτάται από το τι ακριβώς τοποθετείται στη στοίβα ανταλλαγής δεδομένων - τη διεύθυνση της μεταβλητής ή την τιμή της. Το Basic χρησιμοποιεί ιστορικά μια παραλλαγή της εξομοίωσης λογισμικού ByVal - υπάρχει πάντα μια διεύθυνση στη στοίβα, αλλά μόνο όταν μεταβιβάζεται η τιμή δημιουργείται μια προσωρινή μεταβλητή για αυτό. Για να γίνει διάκριση μεταξύ αυτών των δύο επιλογών (Κλασική και Βασική), χρησιμοποιούνται διαφορετικοί τρόποι περιγραφής της λειτουργίας ByVal. Σημειώστε ότι η εξομοίωση της λειτουργίας ByVal στο VB παρέχει υψηλότερη αξιοπιστία του προγράμματος: ανακατεύοντας τη μορφή αναφοράς, ο προγραμματιστής κινδυνεύει μόνο να επιστραφεί (ή να μην επιστραφεί) η διορθωμένη τιμή της μεταβλητής στο καλούν πρόγραμμα. Στην "κλασική" έκδοση, μια τέτοια σύγχυση μπορεί να οδηγήσει σε μοιραίο σφάλμα κατά την εκτέλεση μιας διαδικασίας (για παράδειγμα, όταν χρησιμοποιείται μια τιμή μεταβλητής ίση με, ας πούμε, μηδέν, αντί για μια διεύθυνση μνήμης).

Οι συναρτήσεις DLL υλοποιούνται σύμφωνα με τις «κλασικές» αρχές και επομένως απαιτούν μια υποχρεωτική περιγραφή του τρόπου ανταλλαγής δεδομένων με καθένα από τα ορίσματα. Οι δηλώσεις συναρτήσεων μέσω της περιγραφής Declare (ακριβέστερα, η λίστα των ορισμάτων που πέρασαν) εξυπηρετούν αυτόν τον σκοπό. Ο πιο συνηθισμένος τρόπος για να μεταβιβάσετε παραμέτρους σε μια συνάρτηση API ή DLL των Windows είναι να χρησιμοποιήσετε τη λέξη-κλειδί ByVal. Επιπλέον, μπορεί να καθοριστεί τόσο στον τελεστή Declare όσο και απευθείας κατά την κλήση της συνάρτησης.

Οι συνέπειες της εσφαλμένης μετάδοσης παραμέτρων είναι εύκολο να προβλεφθούν. Εάν λάβετε μια προφανώς μη έγκυρη διεύθυνση, θα λάβετε ένα μήνυμα GPF (General Protection Fault). Εάν η συνάρτηση λάβει μια τιμή που ταιριάζει με μια έγκυρη διεύθυνση, τότε η συνάρτηση API θα εισέλθει σε μια ξένη περιοχή (για παράδειγμα, στον πυρήνα των Windows) με όλες τις επακόλουθες καταστροφικές συνέπειες.

2. Ελέγξτε τον τύπο των παραμέτρων που μεταβιβάζονται.Ο σωστός αριθμός και ο σωστός τύπος παραμέτρων που έχουν περάσει είναι εξίσου σημαντικά. Είναι απαραίτητο τα ορίσματα που δηλώνονται στη Δήλωση να ταιριάζουν με τις αναμενόμενες παραμέτρους στη συνάρτηση API. Η πιο συνηθισμένη περίπτωση σφάλματος στη μετάδοση παραμέτρων περιλαμβάνει τη διαφορά μεταξύ NULL και συμβολοσειράς μηδενικού μήκους - θυμηθείτε ότι δεν είναι το ίδιο πράγμα.

3. Ελέγξτε τον τύπο επιστροφής.

Η VB είναι αρκετά ανεκτική σε αναντιστοιχίες τύπου επιστροφής συναρτήσεων, καθώς οι αριθμητικές τιμές συνήθως επιστρέφονται μέσω καταχωρητών και όχι μέσω της στοίβας.

  • Οι ακόλουθοι κανόνες θα σας βοηθήσουν να προσδιορίσετε τη σωστή τιμή που επιστρέφεται από μια συνάρτηση API:
  • Μια συνάρτηση DLL που δεν επιστρέφει μια τιμή (ανάλογη με την κενή στο 'C') πρέπει να δηλωθεί ως VB Sub.
  • Μια συνάρτηση API που επιστρέφει μια ακέραια τιμή (Integer ή Long) μπορεί να οριστεί είτε ως Sub είτε ως μια Συνάρτηση που επιστρέφει μια τιμή του κατάλληλου τύπου.

Καμία από τις συναρτήσεις API δεν επιστρέφει αριθμούς κινητής υποδιαστολής, αλλά ορισμένα DLL ενδέχεται να επιστρέφουν αυτόν τον τύπο δεδομένων. 4. Χρησιμοποιήστε την κατασκευή «Όπως κάθε» με μεγάλη προσοχή.

Πολλές συναρτήσεις API των Windows έχουν τη δυνατότητα να δέχονται παραμέτρους διαφορετικών τύπων και χρησιμοποιούν την κατασκευή As Any για να το κάνουν (η ερμηνεία του τύπου εκτελείται ανάλογα με την τιμή των άλλων παραμέτρων που έχουν περάσει).

Μια καλή λύση σε αυτή την περίπτωση μπορεί να είναι η χρήση πολλών ψευδωνύμων (Ψευδώνυμο) μιας συνάρτησης δημιουργώντας δύο ή περισσότερες δηλώσεις για την ίδια συνάρτηση, με κάθε δήλωση να καθορίζει παραμέτρους ενός συγκεκριμένου τύπου. 5. Μην ξεχάσετε να αρχικοποιήσετε τις συμβολοσειρές.

Υπάρχουν πολλές συναρτήσεις στο Win API που επιστρέφουν πληροφορίες φορτώνοντας δεδομένα σε buffer συμβολοσειρών που έχουν περάσει ως παράμετρος. Στο πρόγραμμά σας, φαινομενικά μπορείτε να κάνετε τα πάντα σωστά: μην ξεχνάτε το ByVal, περάστε σωστά τις παραμέτρους στη συνάρτηση. Αλλά τα Windows δεν μπορούν να ελέγξουν πόσο μεγάλο είναι το μέγεθος της μνήμης που εκχωρείται για μια σειρά. Το μέγεθος της σειράς πρέπει να είναι αρκετά μεγάλο ώστε να χωράει όλα τα δεδομένα που μπορούν να τοποθετηθούν σε αυτήν. Η ευθύνη για την κράτηση ενός buffer του απαιτούμενου μεγέθους ανήκει στον προγραμματιστή VB.

Θα πρέπει να σημειωθεί ότι στα Windows 32 bit, όταν χρησιμοποιούνται συμβολοσειρές, η μετατροπή πραγματοποιείται από Unicode (κωδικοποίηση διπλού byte) σε ANSI (κωδικοποίηση ενός byte) και αντίστροφα, λαμβάνοντας υπόψη τις ρυθμίσεις του εθνικού συστήματος. Επομένως, για να κρατήσετε buffers, μερικές φορές είναι πιο βολικό να χρησιμοποιείτε πίνακες byte αντί για μεταβλητές συμβολοσειράς. (Περισσότερα για αυτό παρακάτω.)

6. Βεβαιωθείτε ότι χρησιμοποιείτε το Option Explicit.

7. Ελέγξτε προσεκτικά τις τιμές παραμέτρων και τις τιμές επιστροφής.Η VB έχει καλές δυνατότητες ελέγχου τύπου. Αυτό σημαίνει ότι όταν προσπαθείτε να περάσετε μια μη έγκυρη παράμετρο σε μια συνάρτηση VB, το χειρότερο που μπορεί να συμβεί είναι να λάβετε ένα μήνυμα σφάλματος από τη VB. Αλλά αυτός ο μηχανισμός, δυστυχώς, δεν λειτουργεί κατά την πρόσβαση στις λειτουργίες API των Windows.

Τα Windows 9x έχουν βελτιώσει τον έλεγχο παραμέτρων για τις περισσότερες λειτουργίες API. Επομένως, η παρουσία ενός σφάλματος στα δεδομένα συνήθως δεν προκαλεί μοιραίο σφάλμα, αλλά ο προσδιορισμός του τι το προκάλεσε δεν είναι τόσο εύκολος.

Εδώ συνιστούμε να χρησιμοποιήσετε διάφορους τρόπους για τον εντοπισμό σφαλμάτων αυτού του τύπου σφάλματος:

  • Χρησιμοποιήστε τη λειτουργία εντοπισμού σφαλμάτων βήμα προς βήμα ή την εντολή Debug.Print για να ελέγξετε κάθε ύποπτη κλήση λειτουργίας API. Ελέγξτε τα αποτελέσματα αυτών των κλήσεων για να βεβαιωθείτε ότι όλα είναι κανονικά και ότι η λειτουργία έχει ολοκληρωθεί σωστά.
  • χρησιμοποιήστε ένα πρόγραμμα εντοπισμού σφαλμάτων των Windows όπως το CodeView και μια έκδοση εντοπισμού σφαλμάτων των Windows (διατίθεται στο SDK των Windows). Αυτά τα εργαλεία μπορούν να εντοπίσουν ένα σφάλμα παραμέτρου και τουλάχιστον να προσδιορίσουν ποια συνάρτηση API προκαλεί το σφάλμα.
  • Χρησιμοποιήστε πρόσθετα εργαλεία τρίτων για να ελέγξετε τους τύπους παραμέτρων και την εγκυρότητα των τιμών τους. Τέτοια εργαλεία όχι μόνο μπορούν να βρουν σφάλματα παραμέτρων, αλλά ακόμη και να υποδείξουν τη γραμμή του κώδικα VB όπου παρουσιάστηκε το σφάλμα.

Επιπλέον, είναι απαραίτητο να ελέγξετε το αποτέλεσμα της εκτέλεσης της συνάρτησης API.

8. Να θυμάστε ότι οι ακέραιοι στη VB και στα Windows δεν είναι το ίδιο πράγμα.Πρώτα απ 'όλα, θα πρέπει να έχετε κατά νου ότι ο όρος "Integer" στη VB σημαίνει έναν αριθμό 16 bit, ενώ στην τεκμηρίωση Win 32 σημαίνει έναν αριθμό 32 bit. Δεύτερον, οι ακέραιοι αριθμοί (Integer και Long) στο VB είναι σηματοδοτημένες ποσότητες (δηλαδή, ένα ψηφίο χρησιμοποιείται ως σύμβολο, το υπόλοιπο ως μάντισσα του αριθμού), στα Windows χρησιμοποιούνται μόνο μη αρνητικοί αριθμοί. Αυτή η περίσταση πρέπει να λαμβάνεται υπόψη όταν σχηματίζετε μια περασμένη παράμετρο χρησιμοποιώντας αριθμητικές πράξεις (για παράδειγμα, υπολογίζοντας μια διεύθυνση αθροίζοντας κάποια βάση και μετατόπιση).

Οι τυπικές αριθμητικές συναρτήσεις VB δεν είναι κατάλληλες για αυτό. Θα συζητήσουμε τι πρέπει να κάνουμε σε αυτήν την περίπτωση ξεχωριστά.Σε αντίθεση με το Win16, τα ονόματα όλων των λειτουργιών του Win32 API είναι ευαίσθητα στην ακριβή χρήση πεζών και κεφαλαίων γραμμάτων (αυτό δεν συνέβαινε στο Win16). Εάν χρησιμοποιείτε κάπου ένα πεζό γράμμα αντί για ένα κεφαλαίο ή το αντίστροφο, τότε η επιθυμητή λειτουργία δεν θα βρεθεί. Προσέξτε επίσης να χρησιμοποιείτε σωστά το επίθημα A ή W σε συναρτήσεις που χρησιμοποιούν παραμέτρους συμβολοσειράς. (Για περισσότερα σχετικά, δείτε παρακάτω.)

10. Αποθηκεύστε συχνά την εργασία σας.Σφάλματα που σχετίζονται με εσφαλμένη χρήση των DLL και των Win API μπορεί να οδηγήσουν σε επείγοντα τερματισμό του περιβάλλοντος VB και πιθανώς ολόκληρου του λειτουργικού συστήματος. Θα πρέπει να βεβαιωθείτε ότι ο κώδικας που γράφετε έχει αποθηκευτεί πριν από τη δοκιμαστική εκτέλεση. Το απλούστερο πράγμα είναι να ρυθμίσετε τη λειτουργία αυτόματης εγγραφής των μονάδων έργου πριν ξεκινήσετε το έργο στο περιβάλλον VB.

Αφού διαβάσετε την προηγούμενη συμβουλή, μπορεί να πιστεύετε ότι η χρήση των λειτουργιών Win API είναι επικίνδυνη. Σε κάποιο βαθμό αυτό είναι αλήθεια, αλλά μόνο σε σύγκριση με τον ασφαλή προγραμματισμό που παρέχει η ίδια η VB. Αλλά με την επιδέξια χρήση τους και τη γνώση των πιθανών παγίδων, αυτός ο κίνδυνος είναι ελάχιστος. Επιπλέον, είναι συχνά απλά αδύνατο να εγκαταλείψετε εντελώς τη χρήση του Win API - θα εξακολουθούν να απαιτούνται για οποιαδήποτε σοβαρή ανάπτυξη.

Επιπλέον, αναφέραμε προηγουμένως τις παγίδες για μια ευρεία κατηγορία DLL. Στην περίπτωση του Win API, όλα είναι πολύ πιο απλά, αφού η φόρμα πρόσβασης σε αυτές τις λειτουργίες είναι σαφώς ενοποιημένη. Θα πρέπει να ληφθούν υπόψη τα ακόλουθα κύρια σημεία:

  1. Οι συναρτήσεις του Win32 API είναι ακριβώς αυτό: λειτουργίες, δηλαδή διαδικασίες του τύπου Function (υπήρχαν πολλές Sub-ρουτίνες στο Win16 API). Όλες αυτές είναι συναρτήσεις του τύπου Long, επομένως οι περιγραφές τους είναι γραμμένες με την ακόλουθη μορφή: Δηλώστε όνομα συνάρτησης ... Καθώς το Long 'τύπος συνάρτησης _ ορίζεται ρητά

    Δήλωση Όνομα συνάρτησης& «τύπος συνάρτησης _ προσδιορίζεται χρησιμοποιώντας το επίθημα

    Η κλήση στη συνάρτηση API μοιάζει με αυτό:

Αποτέλεσμα& = ApiName& ([ Λίστα επιχειρημάτων]
  1. Τις περισσότερες φορές, η τιμή επιστροφής μιας συνάρτησης είναι ο κωδικός ολοκλήρωσης της λειτουργίας.

    Επιπλέον, μια μη μηδενική τιμή σε αυτή την περίπτωση σημαίνει κανονική ολοκλήρωση, μηδέν σημαίνει σφάλμα. Συνήθως (αλλά όχι πάντα) μπορείτε να διευκρινίσετε τη φύση του σφάλματος καλώντας τη συνάρτηση GetLastError. Η περιγραφή αυτής της συνάρτησης μοιάζει με αυτή: Δηλώστε τη συνάρτηση GetLastError& Lib "kernel32" ()Όταν εργάζεστε σε VB, είναι προτιμότερο να χρησιμοποιείτε την ιδιότητα LastDLLError του αντικειμένου Err για να λάβετε την τιμή του αναγνωρισμένου κωδικού σφάλματος, καθώς η VB μερικές φορές επαναφέρει τη συνάρτηση GetLastError μεταξύ της κλήσης του API και της συνέχισης της εκτέλεσης του προγράμματος.

    Μπορείτε να ερμηνεύσετε τον κώδικα που επιστρέφεται από το GelLastError χρησιμοποιώντας σταθερές γραμμένες στο αρχείο API32.TXT, με ονόματα που ξεκινούν με το επίθημα ERROR_.

    Τα πιο τυπικά σφάλματα έχουν τους ακόλουθους κωδικούς:

    • ERROR_INVALID_HANDLE = 6& - μη έγκυρη λαβή
    • ERROR_CALL_NOT_IMPLEMENTED = 120& - κλήση μιας συνάρτησης στα Windows 9x που είναι διαθέσιμη μόνο για Windows NT
    • ERROR_INVALID_PARAMETER = 87& - εσφαλμένη τιμή παραμέτρου

    Ωστόσο, πολλές συναρτήσεις επιστρέφουν την τιμή κάποιας ζητούμενης παραμέτρου (για παράδειγμα, το OpenFile επιστρέφει την τιμή της λαβής αρχείου). Σε τέτοιες περιπτώσεις, το σφάλμα καθορίζεται από κάποια άλλη ειδική τιμή Return&, πιο συχνά 0 ή –1.

  2. Τα Win32 API χρησιμοποιούν αυστηρά καθορισμένους τρόπους για τη μεταφορά των απλούστερων τύπων δεδομένων.

    α) ByVal...As Long Τουλάχιστον το 80% της διέλευσης ορισμάτων γίνεται με χρήση μεταβλητών Long.Σημειώστε ότι το επιχείρημα

    Πάντοτε

    συνοδεύεται από τη λέξη-κλειδί ByVal και αυτό, μεταξύ άλλων, σημαίνει ότι πραγματοποιείται μονόδρομη μεταφορά δεδομένων - από το πρόγραμμα VB στη λειτουργία API. Τουλάχιστον το 80% της διέλευσης ορισμάτων γίνεται με χρήση μεταβλητών Long.Β) ByVal...As String

    Αυτός ο τύπος μεταφοράς δεδομένων συμβαίνει επίσης αρκετά συχνά, και με το επιχείρημα επίσης

    Ισχύει η ByVal. Όταν καλείται μια συνάρτηση API, η διεύθυνση της συμβολοσειράς γράφεται στη στοίβα, οπότε σε αυτήν την περίπτωση είναι δυνατή η αμφίδρομη ανταλλαγή δεδομένων.

    Το δεύτερο πρόβλημα είναι ότι κατά την κλήση μιας συνάρτησης API, η συμβολοσειρά προέλευσης μετατρέπεται σε κάποια εσωτερική αναπαράσταση και κατά την έξοδο από τη συνάρτηση, το αντίστροφο. Αν στις ημέρες του Win16 αυτή η λειτουργία συνίστατο μόνο στην προσθήκη ενός μηδενικού byte στο τέλος της γραμμής, τότε με την εμφάνιση του Win32 αυτό προστέθηκε στον μετασχηματισμό της κωδικοποίησης Unicode δύο byte σε ANSI και αντίστροφα. (Αυτό συζητήθηκε λεπτομερώς στο άρθρο "Δυνατότητες εργασίας με μεταβλητές συμβολοσειράς στο VB", ComputerPress 10'99 και 01'2000). Προς το παρόν, ας σημειώσουμε απλώς ότι χρησιμοποιώντας το ByVal ... Ως δομή String, μπορείτε να ανταλλάξετε συμβολοσειρές μόνο με δεδομένα χαρακτήρων.

    Β) ...Όπως κάθε

    Αυτό σημαίνει ότι κάποια διεύθυνση buffer μνήμης θα προωθηθεί στη στοίβα, τα περιεχόμενα της οποίας θα ερμηνευθούν από τη συνάρτηση API, για παράδειγμα, ανάλογα με την τιμή άλλων ορισμάτων. Ωστόσο, το As Any μπορεί να χρησιμοποιηθεί μόνο στη δήλωση Declare - όταν καλείται μια συγκεκριμένη συνάρτηση, μια συγκεκριμένη μεταβλητή πρέπει να οριστεί ως όρισμα.

    Δ) ... Ως UserDefinedType

    Αυτός ο σχεδιασμός χρησιμοποιείται επίσης συχνά όταν είναι απαραίτητη η ανταλλαγή δεδομένων (γενικά και προς τις δύο κατευθύνσεις) χρησιμοποιώντας κάποια δομή. Στην πραγματικότητα, αυτή η κατασκευή είναι ένα είδος συγκεκριμένης υλοποίησης της φόρμας μετάδοσης As Any, απλώς σε αυτήν την περίπτωση η συνάρτηση έχει διαμορφωθεί σε μια σταθερή δομή.

    Η μορφή της δομής δεδομένων καθορίζεται από τη συγκεκριμένη συνάρτηση API και είναι ευθύνη του προγραμματιστή να την περιγράψει σωστά και να την κρατήσει στο καλούν πρόγραμμα. Αυτό το σχέδιο Τουλάχιστον το 80% της διέλευσης ορισμάτων γίνεται με χρήση μεταβλητών Long.μεταχειρισμένος χωρίςλέξεις ByVal, δηλαδή, σε αυτήν την περίπτωση, εκτελείται μεταφορά με αναφορά - η διεύθυνση της μεταβλητής γράφεται στη στοίβα.

Παράδειγμα κλήσης μιας συνάρτησης API

Ας επεξηγήσουμε τα παραπάνω χρησιμοποιώντας το παράδειγμα χρήσης δύο χρήσιμων συναρτήσεων για την εργασία με αρχεία - το άνοιγμα και το lread, οι οποίες περιγράφονται ως εξής:

Δήλωση συνάρτησης lopen Lib "kernel32" _ Ψευδώνυμο "_lopen" (_ ByVal lpFileName As String, _ ByVal wReadWrite As Long) As Long Δήλωση συνάρτησης lread Lib "kernel32" _ Ψευδώνυμο "_lread" (_ ByVal Long, h File lpBuffer As Any, _ ByVal wBytes As Long) As Long

Στη VB, τα ανάλογα τους - σε αυτήν την περίπτωση τα ακριβή - είναι οι τελεστές Open και Get (για Binary mode). Ας δώσουμε αμέσως προσοχή στη χρήση της λέξης-κλειδιού Alias ​​σε μια δήλωση συνάρτησης - αυτό ακριβώς συμβαίνει όταν δεν μπορείτε να το κάνετε χωρίς αυτήν. Τα πραγματικά ονόματα συναρτήσεων στη βιβλιοθήκη ξεκινούν με μια κάτω παύλα (τυπικό στυλ γλώσσας C), η οποία δεν επιτρέπεται στη VB.

Η λειτουργία ανοίγματος αρχείου μπορεί να μοιάζει με αυτό:

Const INVALID_HANDLE_VALUE = -1 ' λανθασμένη _ τιμή περιγραφής lpFileName$ = “D:\calc.bas” ' όνομα αρχείου wReadWrite& = 2 ' λειτουργία ανάγνωσης-εγγραφής hFile& = lopen(lpFileName$, wReadWrite&) αρχείου&h = Αν ορίστε το INVALID_HANDLE_VALUE Στη συνέχεια _ ' σφάλμα ανοίγματος του αρχείου ' προσδιορίστε τον κωδικό σφάλματος CodeError& = Err.LastDllError 'CodeError& = GetLastError _ ' αυτή η κατασκευή δεν λειτουργεί Τέλος Εάν

Εδώ πρέπει να δώσετε προσοχή σε δύο σημεία:

  • ως τιμή της συνάρτησης παίρνουμε την τιμή του περιγραφέα αρχείου. Το σφάλμα αντιστοιχεί σε τιμή -1.
  • Ακριβώς σε αυτήν την περίπτωση δεν λειτουργεί η κλήση της συνάρτησης GetLastError - για να λάβουμε μια ακριβή τιμή σφάλματος, στραφήκαμε στο αντικείμενο Err (μιλήσαμε για την πιθανότητα μιας τέτοιας κατάστασης παραπάνω).

Τα περιεχόμενα του αρχείου μπορούν στη συνέχεια να διαβαστούν, αλλά αυτό προϋποθέτει ότι ο προγραμματιστής πρέπει να έχει κάποια κατανόηση της δομής του (όπως ακριβώς συμβαίνει όταν εργάζεται με αυθαίρετα δυαδικά αρχεία). Σε αυτήν την περίπτωση, η κλήση της συνάρτησης lread μπορεί να μοιάζει με αυτό:

Dim MyVar As Single wBytes = lread (hFile&, MyVar, Len(MyVar) ' διαβάζει έναν πραγματικό αριθμό, 4 byte' wBytes είναι ο αριθμός των δεδομένων που πραγματικά διαβάστηκαν, ' -1 είναι σφάλμα... Πληκτρολογήστε MyStruct x Ως Single i As Ακέραιος τύπος τέλους Dim MyVar As MyStruct wBytes = lread (hFile&, MyVar, Len(MyVar)) ' διάβασε δομή δεδομένων, 6 byte

Σημειώστε ξανά: το δεύτερο όρισμα στη συνάρτηση μεταβιβάζεται με αναφορά, τα υπόλοιπα μεταβιβάζονται με τιμή.

Dim MyVar As String MyVar = Space$(10) ‘κρατήστε μια μεταβλητή για 10 χαρακτήρες wBytes = lread (hFile&, ByVal MyVar, Len(MyVar)) ‘ διαβάστε μια συμβολοσειρά χαρακτήρων, 10 χαρακτήρες

Εδώ μπορείτε να δείτε μια σημαντική διαφορά από το προηγούμενο παράδειγμα - η μεταβλητή συμβολοσειράς συνοδεύεται απαραίτητα από τη λέξη-κλειδί ByVal.

Η ανάγνωση των περιεχομένων ενός αρχείου σε έναν πίνακα (για λόγους απλότητας, θα χρησιμοποιήσουμε έναν μονοδιάστατο πίνακα byte) γίνεται ως εξής:

Dim MyArray(1 έως 10) Ως Byte wBytes = lread (hFile&, MyArray(1), _ Len(MyArray(1))* 10) ‘διάβασε 10 στοιχεία πίνακα

Καθορίζοντας το πρώτο στοιχείο του πίνακα ως όρισμα, μεταβιβάζουμε τη διεύθυνση της αρχής της περιοχής μνήμης που έχει δεσμευτεί για τον πίνακα. Προφανώς, μπορείτε να γεμίσετε οποιοδήποτε τμήμα ενός πίνακα με αυτόν τον τρόπο:

WBytes = lread (hFile&, MyArray(4), _ Len(MyArray(1))* 5) ‘ ανάγνωση στοιχείων πίνακα 4 έως 8

Συμβουλή 5: Χρησιμοποιήστε το ψευδώνυμο για Gearsκαι παραμέτρους Ως Οποιαδήποτε

Εδώ, με βάση το προηγούμενο παράδειγμα, θα αποκαλύψουμε την ουσία της τέταρτης συμβουλής του Dan Appleman.

Όταν εργάζεστε με τη συνάρτηση lread, θα πρέπει να θυμάστε ότι κατά την πρόσβαση σε αυτήν χρησιμοποιώντας μια μεταβλητή συμβολοσειράς, πρέπει να χρησιμοποιήσετε τη λέξη-κλειδί ByVal (διαφορετικά θα λάβετε μηνύματα σχετικά με μια παράνομη λειτουργία). Για να προστατευτείτε, μπορείτε να κάνετε μια πρόσθετη ειδική περιγραφή της ίδιας συνάρτησης για να λειτουργεί μόνο με μεταβλητές συμβολοσειράς:

Δήλωση συνάρτησης lreadString Lib "kernel32" _ Ψευδώνυμο "_lread" (_ ByVal hFile As Long, ByVal lpBuffer As String, _ ByVal wBytes As Long) As Long

Όταν εργάζεστε με αυτήν την περιγραφή, δεν χρειάζεται πλέον να προσδιορίζετε το ByVal όταν επικοινωνείτε:

WBytes = lreadString(hFile&, MyVarString, _ Len(MyVarString)) '

Φαίνεται ότι η σύνταξη του τελεστή Declare σάς επιτρέπει να κάνετε μια παρόμοια ειδική περιγραφή για έναν πίνακα:

Δηλώστε τη συνάρτηση lreadString Lib "kernel32" Ψευδώνυμο "_lread" (_ ByVal hFile As Long, lpBuffer() As Byte, _ ByVal wBytes As Long) As Long

Ωστόσο, η έφεση

WBytes = lreadArray(hFile&, MyArray(), 10)

οδηγεί αναπόφευκτα σε μοιραίο σφάλμα προγράμματος.

Αυτή είναι μια συνέχεια της συζήτησης σχετικά με τις ιδιαιτερότητες της επεξεργασίας μεταβλητών συμβολοσειράς στη Visual Basic: Η VB χρησιμοποιεί κωδικοποίηση Unicode δύο byte, το Win API χρησιμοποιεί ANSI ενός byte (και με τη μορφή που υιοθετείται στο C - με μηδέν byte στο τέλος) . Κατά συνέπεια, όταν χρησιμοποιούνται μεταβλητές συμβολοσειράς ως όρισμα, η μετατροπή από Unicode σε ANSI εκτελείται πάντα αυτόματα κατά την κλήση μιας συνάρτησης API (ακριβέστερα, μιας συνάρτησης DLL) και η αντίστροφη μετατροπή κατά την επιστροφή.

Η λύση από αυτό είναι απλή: Οι μεταβλητές συμβολοσειράς μπορούν να χρησιμοποιηθούν για την ανταλλαγή δεδομένων χαρακτήρων, αλλά δεν μπορούν να χρησιμοποιηθούν για την ανταλλαγή αυθαίρετων δυαδικών πληροφοριών (όπως συνέβη με τις εκδόσεις 16-bit της VB). Στην τελευταία περίπτωση, είναι καλύτερο να χρησιμοποιήσετε έναν μονοδιάστατο πίνακα byte.

Όπως γνωρίζετε, ο τύπος String μπορεί να χρησιμοποιηθεί για να περιγράψει μια προσαρμοσμένη δομή. Από αυτή την άποψη, πρέπει να θυμάστε τα ακόλουθα:

  • Απαγορεύεται αυστηρά η χρήση της ακόλουθης κατασκευής για πρόσβαση στο Win API: Πληκτρολογήστε MyStruct x As Single s As String «Συμβολοσειρά μεταβλητού μήκους Τύπος τέλους

    Στην περίπτωση μιας συμβολοσειράς μεταβλητού μήκους, ένας περιγραφέας συμβολοσειράς μεταβιβάζεται ως μέρος της δομής με όλες τις επακόλουθες συνέπειες με τη μορφή σφάλματος εκτέλεσης προγράμματος.

  • Μπορείτε να χρησιμοποιήσετε μια συμβολοσειρά σταθερού μήκους ως στοιχείο δομής: Πληκτρολογήστε MyStruct x As Single s As String*8 ‘ string-length string End Type

Σε αυτήν την περίπτωση, εκτελείται η αντίστοιχη μετατροπή κωδικοποίησης.

Και μια τελευταία σημείωση: σε καμία περίπτωση δεν πρέπει να χρησιμοποιείτε μια σειρά από μεταβλητές συμβολοσειράς (τόσο σταθερού όσο και μεταβλητού μήκους) κατά την πρόσβαση σε μια συνάρτηση API.

Διαφορετικά, η εμφάνιση μιας «παράνομης επιχείρησης» θα είναι εγγυημένη.

Είναι πιθανό ότι θα έχετε μια κατάσταση όπου πρέπει να γράψετε τις δικές σας συναρτήσεις DLL. Η ανάγκη για αυτό θα προκύψει αναπόφευκτα εάν χρησιμοποιείτε τεχνολογία μικτού προγραμματισμού - χρησιμοποιώντας δύο ή περισσότερες γλώσσες προγραμματισμού για την υλοποίηση μιας εφαρμογής.

Από αυτή την άποψη, σημειώνουμε ότι ο μεικτός προγραμματισμός είναι αρκετά συνηθισμένος για την υλοποίηση μιας αρκετά περίπλοκης εφαρμογής. Πράγματι, κάθε γλώσσα (ακριβέστερα, ένα σύστημα προγραμματισμού που βασίζεται σε μια γλώσσα) έχει τα δικά της δυνατά και αδύνατα σημεία, επομένως είναι πολύ λογικό να εκμεταλλευόμαστε διαφορετικά εργαλεία για την επίλυση διαφορετικών προβλημάτων. Για παράδειγμα, VB - για τη δημιουργία διεπαφής χρήστη, C - για αποτελεσματική πρόσβαση στους πόρους του συστήματος, Fortran - για την υλοποίηση αριθμητικών αλγορίθμων.

Η γνώμη του συγγραφέα είναι η εξής: κάθε σοβαρός προγραμματισμός απαιτεί από τον προγραμματιστή να είναι ικανός σε τουλάχιστον δύο εργαλεία. Φυσικά, σε σύγχρονες συνθήκες σαφούς καταμερισμού εργασίας είναι πολύ δύσκολο να είσαι άριστος ειδικός ακόμη και σε δύο συστήματα, επομένως το σχήμα «κύριας και βοηθητικές γλώσσες» είναι πιο λογικό. Η ιδέα εδώ είναι ότι ακόμη και μια επιφανειακή γνώση της «βοηθητικής» γλώσσας (γράφοντας αρκετά απλές διαδικασίες) μπορεί να βελτιώσει σημαντικά την αποτελεσματικότητα της χρήσης της «κύριας». Σημειώστε ότι η γνώση της VB, τουλάχιστον ως βοηθητική, είναι σήμερα σχεδόν υποχρεωτική προϋπόθεση για έναν επαγγελματία προγραμματιστή. Παρεμπιπτόντως, την εποχή του DOS, η γνώση των βασικών στοιχείων του Assembler ήταν εξαιρετικά επιθυμητή για κάθε προγραμματιστή, συμπεριλαμβανομένου του Basic.

Με τον ένα ή τον άλλο τρόπο, ακόμη και στην ομαδική εργασία, όταν κάθε προγραμματιστής ασχολείται με τη δική του συγκεκριμένη εργασία, όλοι οι συμμετέχοντες στο έργο πρέπει να έχουν μια ιδέα για τα χαρακτηριστικά της διαδικαστικής διεπαφής σε διαφορετικές γλώσσες. Και γνωρίζετε ότι πολλά συστήματα προγραμματισμού (συμπεριλαμβανομένου του VB), εκτός από την προεπιλεγμένη διεπαφή, σας επιτρέπουν να χρησιμοποιείτε άλλες, προηγμένες μεθόδους πρόσβασης σε διαδικασίες που καθιστούν δυνατή την προσαρμογή της διεπαφής σε άλλη γλώσσα.

  • Διαφορετικές γλώσσες μπορεί να χρησιμοποιούν διαφορετικές συμβάσεις για τη σύνταξη αναγνωριστικών. Για παράδειγμα, είναι σύνηθες να χρησιμοποιείται μια υπογράμμιση στην αρχή ενός ονόματος διαδικασίας, η οποία δεν επιτρέπεται στη VB. Αυτό το πρόβλημα επιλύεται εύκολα χρησιμοποιώντας τη λέξη-κλειδί Alias ​​στη δήλωση Declare (δείτε παράδειγμα συμβουλή 2.3).
  • Μπορεί να χρησιμοποιηθεί μια διαφορετική ακολουθία εγγραφής διαβιβασμένων ορισμάτων στη στοίβα. Για παράδειγμα, στις μέρες του DOS (ειλικρινά το παραδέχομαι, δεν ξέρω πώς φαίνεται τώρα στο περιβάλλον των Windows), ο C έγραφε επιχειρήματα από το τέλος της λίστας, άλλες γλώσσες (Fortran, Pascal, Basic) - από την αρχή.
  • Από προεπιλογή, χρησιμοποιούνται διαφορετικές αρχές μεταβίβασης παραμέτρων - με αναφορά ή με τιμή.
  • Διάφορες αρχές για την αποθήκευση μεταβλητών συμβολοσειρών. Για παράδειγμα, στο C (όπως και στο Fortran και το Pascal), το μήκος μιας συμβολοσειράς καθορίζεται από το null byte στο τέλος της, αλλά στο Basic το μήκος γράφεται ρητά στον περιγραφέα συμβολοσειράς. Φυσικά, πρέπει να έχετε κατά νου τη δυνατότητα χρήσης διαφορετικών κωδικοποιήσεων χαρακτήρων.
  • Κατά τη μεταφορά πολυδιάστατων πινάκων, θα πρέπει να θυμάστε ότι είναι δυνατές διάφορες επιλογές για τη μετατροπή πολυδιάστατων δομών σε μονοδιάστατες (ξεκινώντας από τον πρώτο δείκτη ή από τον τελευταίο, σε σχέση με δισδιάστατους πίνακες - "κατά γραμμές" ή "κατά στήλες" ).

Λαμβάνοντας υπόψη όλα αυτά, μπορούν να διατυπωθούν οι ακόλουθες συστάσεις:

  • Χρησιμοποιήστε τις απλούστερες, αποδεδειγμένες μεθόδους για τη μεταβίβαση ορισμάτων σε συναρτήσεις DLL.
  • Τα πρότυπα που υιοθετήθηκαν για το Win API είναι αρκετά κατάλληλα ως μοντέλο.
  • Ποτέ μην περνάτε πίνακες μεταβλητών συμβολοσειρών.
  • Να είστε πολύ προσεκτικοί όταν μεταβιβάζετε απλές μεταβλητές συμβολοσειράς και πολυδιάστατους πίνακες.

Τι γίνεται όμως αν η συνάρτηση DLL είναι ήδη γραμμένη, για παράδειγμα, στο Fortran, αλλά η διεπαφή εισόδου της δεν ταιριάζει πολύ καλά στα παραπάνω πρότυπα VB; Υπάρχουν δύο συμβουλές εδώ. Πρώτα: γράψτε μια δοκιμαστική συνάρτηση DLL και χρησιμοποιήστε την για να προσπαθήσετε να βρείτε την επιθυμητή κλήση από το πρόγραμμα VB χρησιμοποιώντας δοκιμή και σφάλμα. Δεύτερον: γράψτε μια διαδικασία προσαρμογέα στο ίδιο Fortran που θα παρείχε μια απλή διεπαφή μεταξύ VB και μιας συνάρτησης DLL με τη μετατροπή απλών δομών δεδομένων σε σύνθετες (για παράδειγμα, μετατροπή ενός πολυδιάστατου πίνακα byte σε πίνακα συμβολοσειρών).

Λοιπόν: χρησιμοποιήστε συναρτήσεις DLL. Παραμείνετε όμως σε εγρήγορση...

ComputerPress 9"2000

Χρησιμοποιώντας το WinAPI, μπορείτε να δημιουργήσετε διάφορες διαδικασίες παραθύρων, παράθυρα διαλόγου, προγράμματα, ακόμη και παιχνίδια. Αυτή, ας πούμε, η βιβλιοθήκη είναι βασική στο mastering προγραμματισμού, το MFC, επειδή αυτές οι διεπαφές είναι πρόσθετα αυτής της βιβλιοθήκης. Αφού το κατακτήσετε, θα δημιουργήσετε εύκολα φόρμες και θα καταλάβετε πώς συμβαίνει αυτό.

Ας μην μπούμε στη θεωρία. Ας ξεκινήσουμε με τον τρόπο δημιουργίας αυτού του έργου στο MVS και στο τέλος του άρθρου θα συζητηθεί ένα απλό παράδειγμα.

Ετσι. Πρώτα, ανοίξτε το Visual Studio, μετά κάντε κλικ στην καρτέλα "Αρχείο" και μετά "Δημιουργία έργου":

Στη συνέχεια, στην αναπτυσσόμενη λίστα Visual C++, επιλέξτε το στοιχείο Win32, θα υπάρχει ένα "Win32 Project". Κάντε κλικ σε αυτό:
Εισαγάγετε το όνομα του έργου, καθορίστε τη διαδρομή και κάντε κλικ στο "OK". Στη συνέχεια θα λέει: "Καλώς ήρθατε στον Οδηγό εφαρμογών Win32". Κάντε κλικ στο επόμενο. Από προεπιλογή, η επιγραφή "Κενό έργο" δεν έχει σημάδι επιλογής. Πρέπει να το εγκαταστήσουμε και να βεβαιωθούμε ότι ο "Τύπος Εφαρμογής" μας είναι Εφαρμογή Windows. Εάν όλα είναι σωστά, κάντε κλικ στο "Τέλος".

Θα πρέπει να έχουμε ένα κενό έργο όπως αυτό:

Λοιπόν, τώρα ας αρχίσουμε να γράφουμε ένα απλό πρόγραμμα που θα εμφανίζει παραδοσιακά την επιγραφή στην οθόνη: "Γεια σου Κόσμε!!!"

Φυσικά, πρέπει να προσθέσετε ένα αρχείο όπως το "name".cpp στο έργο. Κάντε δεξί κλικ στα «Αρχεία πηγαίου κώδικα», επιλέξτε την καρτέλα «Προσθήκη» από την αναπτυσσόμενη λίστα και μετά «Δημιουργία στοιχείου...». Ως αποτέλεσμα, θα πρέπει να έχουμε ένα παράθυρο όπως αυτό:

Επιλέξτε "Αρχείο C++", πληκτρολογήστε ένα όνομα, κάντε κλικ στο "Προσθήκη". Στη συνέχεια, ανοίξτε αυτό το αρχείο και επικολλήστε τον ακόλουθο κώδικα σε αυτό (λεπτομέρειες παρακάτω):

#συμπεριλαμβάνω // αρχείο κεφαλίδας που περιέχει συναρτήσεις API // Η κύρια συνάρτηση είναι ένα ανάλογο της int main() σε μια εφαρμογή κονσόλας: int WINAPI WinMain(HINSTANCE hInstance, // περιγραφέας παρουσίας εφαρμογής HINSTANCE hPrevInstance, // Το LPSTR δεν χρησιμοποιείται στο Win32 lpCmdLine, // απαιτείται για την εκκίνηση ενός παραθύρου σε λειτουργία γραμμής εντολών int nCmdShow) // λειτουργία εμφάνισης παραθύρου ( // Λειτουργία για την εμφάνιση ενός παραθύρου με το κουμπί "OK" στην οθόνη (περισσότερα για τις παραμέτρους αργότερα) MessageBox(NULL, L"Hello, κόσμος!!!", L"Διαδικασία παραθύρου ", MB_OK); επιστροφή NULL; // επιστροφή της τιμής της συνάρτησης )

Το αποτέλεσμα πρέπει να είναι ως εξής:

Τώρα ας ρίξουμε μια πιο προσεκτική ματιά στον κώδικα του προγράμματος.

Στην πρώτη γραμμή συμπεριλαμβάνουμε το αρχείο κεφαλίδας windows.h. Περιέχει όλες τις απαραίτητες λειτουργίες «εφαρμογής». Όλα είναι ξεκάθαρα εδώ.

ΣΕ 4-7 γραμμέςΈχουμε μια περιγραφή της συνάρτησης int WINAPI WinMain().

Ο προσδιορισμός WINAPI είναι πάντα απαραίτητος για τη συνάρτηση WinMain. Απλά θυμηθείτε αυτό. WinMain είναι το όνομα της συνάρτησης. Έχει τέσσερις παραμέτρους. Το πρώτο είναι το HINSTANCE hInstance ( γραμμή 4). Το hInstance είναι ένας περιγραφέας παρουσίας παραθύρου (αυτός είναι ένας συγκεκριμένος κωδικός διαδικασίας παραθύρου, ένα αναγνωριστικό με το οποίο το λειτουργικό σύστημα θα το διακρίνει από άλλα παράθυρα). Μέσω αυτού μπορείτε να έχετε πρόσβαση στο παράθυρο ενώ εργάζεστε σε άλλες λειτουργίες (περισσότερα για αυτό αργότερα) και να αλλάξετε οτιδήποτε στις παραμέτρους του παραθύρου. Το HINSTANCE είναι ένας από τους πολλούς τύπους δεδομένων που ορίζονται στο WinAPI, όπως το int, για παράδειγμα. Και η καταχώρηση HINSTANCE hInstance μας λέει ότι δημιουργούμε μια νέα μεταβλητή τύπου HINSTANCE που ονομάζεται hInstance.

Θα μιλήσουμε για τύπους δεδομένων αργότερα, οπότε ας προχωρήσουμε στην επόμενη παράμετρο: HINSTANCE hPrevInstance ( γραμμή 5). Όπως γράφτηκε στα σχόλια, δεν χρησιμοποιείται στο Win32, δεδομένου ότι δημιουργήθηκε για ένα σύστημα 3.x-bit από το προηγούμενο είναι σαφές ότι πρόκειται για μια λαβή σε ένα παράδειγμα παραθύρου. Στη συνέχεια έχουμε μια μεταβλητή τύπου LPSTR ( γραμμή 6) με το όνομα lpCmdLine. Χρησιμοποιείται εάν εκκινήσουμε ένα παράθυρο μέσω της γραμμής εντολών με παραμέτρους. Μια πολύ εξωτική μέθοδος, οπότε δεν θα σταθούμε σε αυτήν.

Και η τελευταία παράμετρος: ακέραιος, καθορίζει τον τρόπο εμφάνισης του παραθύρου. Απαιτείται για τη συνάρτηση ShowWindow, η οποία θα περιγραφεί αργότερα. Για παράδειγμα, χρησιμοποιώντας το μπορούμε να επεκτείνουμε ένα παράθυρο σε πλήρη οθόνη, να το κάνουμε συγκεκριμένο ύψος, διαφανές ή πάνω από άλλα.

Ας πάμε στη συνάρτηση MessageBox() ( γραμμή 10). Έχει τέσσερις παραμέτρους και απαιτείται για την εμφάνιση μηνυμάτων σφάλματος, για παράδειγμα. Σε αυτήν την περίπτωση, το χρησιμοποιήσαμε για να εμφανίσουμε ένα μήνυμα. Σε γενικές γραμμές, η περιγραφή της λειτουργίας μοιάζει με αυτό:

Int MessageBox(HWND hWnd, // λαβή στο γονικό παράθυρο LPCTSTR lpText, // δείκτης στη γραμμή με το μήνυμα LPCTSTR lpCaption, // δείκτης στη γραμμή με το κείμενο τίτλου UINT uType // σημαίες για εμφάνιση κουμπιών, εικονίδιο). στυλ, κλπ.

Στην περίπτωσή μας, η πρώτη παράμετρος εκχωρείται μηδέν. Αυτό συμβαίνει γιατί δεν έχουμε γονικά παράθυρα (δεν εκκινείται από κανένα πρόγραμμα).

Στη συνέχεια έχουμε δύο μεταβλητές τύπου LPCTSTR: lpText και lpCaption. Το πρώτο αναφέρει πληροφορίες που θα εμφανιστούν στο παράθυρο σε μορφή κειμένου. Το δεύτερο λέει τι θα γραφεί στο κείμενο τίτλου για το παράθυρο. Αυτό είναι ένα ανάλογο του char *str , αλλά ακόμα όχι. Για να εμφανίζεται σωστά το κείμενο, πρέπει να βάλετε το γράμμα L ( UNICODEγραμμή).

Λοιπόν, ο τελευταίος τύπος δεδομένων είναι UINT - ένας ακέραιος χωρίς υπογραφή 32 bit. Δηλαδή ένα ανάλογο του ανυπόγραφου int . Μπορείτε να περάσετε ορισμένες τιμές σε αυτήν την παράμετρο (περισσότερα για αυτές αργότερα), λόγω των οποίων μπορείτε να αλλάξετε την εμφάνιση του κουμπιού. Στην περίπτωσή μας, αυτό είναι MB_OK - σημαίνει ότι το παράθυρο δημιουργεί ένα κουμπί με την επιγραφή "OK" και την αντίστοιχη ενέργεια όταν πατηθεί (κλείσιμο της εφαρμογής).

ΣΕ γραμμή 11επιστρέφουμε την τιμή της συνάρτησης αφού δεν είναι τύπου void .

Έτσι, έχουμε τώρα μια γενική ιδέα για το WinAPI. Συνέχεια στις επόμενες ενότητες.


Τα Windows (αν και αυτό δεν ισχύει για τα Windows 9x και τα Windows CE) είναι πιστοποιημένα από την Εθνική Υπηρεσία Ασφαλείας (NSA) ως σύστημα που παρέχει ασφάλεια επιπέδου C2.

Τα περισσότερα λειτουργικά συστήματα εκτός των UNIX, Linux και Windows περιορίζονται σε συστήματα ενός προμηθευτή.

Η οικογένεια λειτουργικών συστημάτων των Windows προσφέρει μια σειρά από δυνατότητες που δεν είναι διαθέσιμες σε ένα τυπικό σύστημα UNIX, αν και μπορεί να είναι διαθέσιμες σε ορισμένες υλοποιήσεις. Ένα παράδειγμα είναι το σύστημα ασφαλείας επιπέδου C2, καθώς και οι υπηρεσίες NT.

Τα Windows παρέχουν τη λειτουργικότητα των σύγχρονων λειτουργικών συστημάτων και η γκάμα συστημάτων που μπορούν να τα εκτελούν εκτείνεται από επεξεργαστές κειμένου και προγράμματα email έως ενσωματωμένα εταιρικά συστήματα και μεγάλους διακομιστές βάσεων δεδομένων. Οι αποφάσεις σχετικά με τον τρόπο ανάπτυξης εφαρμογών των Windows επηρεάζονται τόσο από τεχνικά ζητήματα όσο και από εταιρικές απαιτήσεις.

Παράθυρα, πρότυπα και ανοιχτά συστήματα

Αυτό το βιβλίο αφορά την ανάπτυξη εφαρμογών χρησιμοποιώντας το API των Windows. Είναι φυσικό οι προγραμματιστές που ασχολούνται με το UNIX και τα ανοιχτά συστήματα να έχουν ερωτήσεις όπως: "Είναι τα Windows ένα ανοιχτό σύστημα;", "Είναι τα Windows ένα βιομηχανικό πρότυπο;", "Είναι τα Windows απλώς ένα ακόμη ιδιόκτητο API;" Οι απαντήσεις σε αυτά τα ερωτήματα εξαρτώνται σε μεγάλο βαθμό από το τι ακριβώς εννοείται με τους ορισμούς ανοιχτό(ανοιχτό), βιομηχανικό πρότυπο(βιομηχανικό πρότυπο) ή κατοχυρωμένο με δίπλωμα ευρεσιτεχνίας(ιδιόκτητο), καθώς και ποια οφέλη αναμένονται από τη χρήση ανοιχτών συστημάτων.

Το API των Windows είναι εντελώς διαφορετικό από το API POSIX που υποστηρίζεται από συστήματα Linux και UNIX. Τα Windows δεν υπόκεινται στο πρότυπο X/Open, ούτε υπόκεινται σε οποιοδήποτε άλλο ανοιχτό βιομηχανικό πρότυπο που έχει προταθεί από τους σχετικούς φορείς τυποποίησης ή κοινοπραξίες του κλάδου.

Τα Windows ελέγχονται από έναν μόνο προμηθευτή. Ενώ η Microsoft λέει ότι είναι πρόθυμη να προσαρμοστεί και να ανταποκριθεί στις απαιτήσεις της βιομηχανίας, είναι ο διαιτητής και ο επιβολής που ενσωματώνεται σε αυτά τα θέματα. Ως εκ τούτου, μεταξύ άλλων πλεονεκτημάτων, οι χρήστες των Windows λαμβάνουν πολλά από τα πλεονεκτήματα που προσφέρουν συνήθως τα ανοιχτά πρότυπα.

Οι ενοποιημένες υλοποιήσεις φτάνουν στην αγορά πιο γρήγορα.

Δεν υπάρχουν απροσδόκητες ιδιόκτητες "βελτιώσεις" ή "επεκτάσεις" με τις οποίες πρέπει να αντιμετωπίσει ο προγραμματιστής, αν και πρέπει να ληφθούν υπόψη μικρές διαφορές μεταξύ των διαφόρων πλατφορμών των Windows.

Ολόκληρο το σύνολο των ολοκληρωμένων προϊόντων ΛΣ που προσφέρουν όλες τις απαιτούμενες δυνατότητες ορίζεται και υλοποιείται από τον ίδιο προμηθευτή. Οι προγραμματιστές εφαρμογών έχουν να επιλύσουν μόνο εργασίες υψηλού επιπέδου.

Η υποκείμενη πλατφόρμα υλικού είναι ανοιχτή. Οι προγραμματιστές μπορούν να επιλέξουν από μια ποικιλία παρόχων πλατφόρμας κατά την κρίση τους.

Η έντονη συζήτηση σχετικά με το εάν αυτή η κατάσταση είναι καλή για τους χρήστες και τη βιομηχανία υπολογιστών στο σύνολό της ή εάν είναι επιβλαβής μόνο για την κοινή υπόθεση, δεν έχει ακόμη τελειώσει. Δεν θα επιχειρήσουμε να εμπλακούμε σε αυτή τη συζήτηση. Ο σκοπός αυτού του βιβλίου είναι απλώς να βοηθήσει τους προγραμματιστές εφαρμογών να ξεκινήσουν να χρησιμοποιούν τα Windows όσο το δυνατόν γρηγορότερα.

Στην πραγματικότητα, τα συστήματα Windows υποστηρίζουν πολλά σημαντικά πρότυπα. Έτσι, τα Windows υποστηρίζουν τις τυπικές βιβλιοθήκες C και C+ και μια σειρά από ανοιχτά πρότυπα για αλληλεπίδραση μεταξύ πλατφορμών. Ένα παράδειγμα είναι τα Windows Sockets, τα οποία παρέχουν μια τυπική διεπαφή προγραμματισμού δικτύου που επιτρέπει τη χρήση του TCP/IP και άλλων πρωτοκόλλων δικτύου, επιτρέποντας έτσι την πρόσβαση στο Διαδίκτυο και τη διαλειτουργικότητα με συστήματα εκτός των Windows. Το ίδιο ισχύει και για το πρωτόκολλο απομακρυσμένων κλήσεων διαδικασίας (RPC). Συστήματα πολλών διαφορετικών φύσεων μπορούν να επικοινωνούν με συστήματα διαχείρισης βάσεων δεδομένων υψηλού επιπέδου (DBMS) χρησιμοποιώντας δομημένη γλώσσα ερωτημάτων (SQL). Τέλος, οι συνολικές προσφορές των Windows περιλαμβάνουν υποστήριξη μέσω Διαδικτύου μέσω Web και άλλων διακομιστών. Τα Windows υποστηρίζουν βασικά πρότυπα όπως το TCP/IP, και μια ζωντανή αγορά παρόχων λύσεων Windows προσφέρει πολλά άλλα πολύτιμα πρόσθετα προϊόντα, συμπεριλαμβανομένων των πελατών και των διακομιστών X Window, σε λογική τιμή.

Συνοπτικά, τα Windows υποστηρίζουν τα πιο σημαντικά πρότυπα διαλειτουργικότητας μεταξύ πλατφορμών και, παρόλο που το βασικό API είναι αποκλειστικό, είναι διαθέσιμο σε λογικό κόστος για ένα ευρύ φάσμα συστημάτων.

Βιβλιοθήκες συμβατότητας

Παρά την παρουσία βιβλιοθηκών συμβατότητας, χρησιμοποιούνται πολύ σπάνια. Υπάρχουν δύο πιθανότητες.

Συστήματα που βασίζονται σε UNIX, Linux, Macintosh και ορισμένα άλλα μπορούν να αναπτύξουν μία από τις βιβλιοθήκες συμβατότητας των Windows, όπως τον εξομοιωτή Windows ανοιχτού κώδικα Wine, επιτρέποντας τη φορητότητα του πηγαίου κώδικα από τα Windows.

Χρησιμοποιώντας λογισμικό ανοιχτού κώδικα και το Windows Resource Kit της Microsoft, μια βιβλιοθήκη συμβατότητας POSIX μπορεί να αναπτυχθεί πάνω από το υποσύστημα των Windows. Μια πολύ περιορισμένη βιβλιοθήκη συμβατότητας περιλαμβάνεται στο περιβάλλον οπτικής ανάπτυξης Microsoft Visual C++.

Έτσι, είναι δυνατόν, αν και χρησιμοποιείται σπάνια, να επιλέξετε ένα API και να αναπτύξετε φορητές εφαρμογές που έχουν αναπτυχθεί με αυτό σε συστήματα Windows, POSIX, ακόμη και Macintosh.

Οι αρχές πίσω από τα Windows

Είναι καλό να μην ξεχνάτε ποτέ κάποιες βασικές αρχές των Windows. Το API των Windows έχει πολλές λεπτές και σημαντικές διαφορές από άλλα API, όπως το POSIX API, με το οποίο είναι εξοικειωμένοι οι προγραμματιστές του UNIX και του Linux. Παρόλο που δεν υπάρχουν συγκεκριμένες λειτουργικές δυσκολίες που σχετίζονται με τη χρήση των Windows, θα χρειαστεί να κάνετε κάποιες αλλαγές στο συνηθισμένο στυλ και μεθοδολογία προγραμματισμού σας.

Παρακάτω είναι μερικές από τις πιο σημαντικές δυνατότητες των Windows με τις οποίες θα εξοικειωθείτε περισσότερο καθώς προχωράμε.

Πολλοί πόροι συστήματος των Windows αντιπροσωπεύονται ως αντικείμενα πυρήνα(αντικείμενα πυρήνα), για τον εντοπισμό και την πρόσβαση στα οποία χρησιμοποιούνται περιγραφείς(λαβές). Αυτοί οι περιγραφείς έχουν παρόμοια σημασία με τους περιγραφείς αρχείων και τα αναγνωριστικά διεργασίας στο UNIX.

Τυχόν χειρισμοί με αντικείμενα του πυρήνα πραγματοποιούνται μόνο χρησιμοποιώντας το API των Windows. Δεν υπάρχουν κενά για να παρακάμψετε αυτόν τον κανόνα. Αυτή η οργάνωση της εργασίας είναι συνεπής με τις αρχές της αφαίρεσης δεδομένων που χρησιμοποιούνται στον αντικειμενοστραφή προγραμματισμό, αν και τα ίδια τα Windows δεν είναι αντικειμενοστραφή.

Τα αντικείμενα περιλαμβάνουν αρχεία, διεργασίες, νήματα, κανάλια επικοινωνίας μεταξύ διεργασιών, αντικείμενα αντιστοίχισης αρχείων, συμβάντα και άλλα. Τα αντικείμενα έχουν χαρακτηριστικά ασφαλείας.

Τα Windows είναι μια πλούσια και ευέλικτη διεπαφή. Πρώτον, οι ίδιες ή παρόμοιες εργασίες μπορούν να επιλυθούν χρησιμοποιώντας πολλές λειτουργίες ταυτόχρονα. για παράδειγμα, υπάρχουν συναρτήσεις ευκολίας που επιτυγχάνονται συνδυάζοντας συχνές ακολουθίες κλήσεων συναρτήσεων σε μία μόνο συνάρτηση (η συνάρτηση CopyFile που χρησιμοποιείται σε ένα από τα παραδείγματα παρακάτω σε αυτό το κεφάλαιο είναι μία από αυτές τις συναρτήσεις). Δεύτερον, οι συναρτήσεις έχουν συχνά πολλές παραμέτρους και σημαίες, πολλές από τις οποίες συνήθως αγνοούνται. Αυτό το βιβλίο δεν προσποιείται ότι είναι ένα εγκυκλοπαιδικό βιβλίο αναφοράς και εστιάζει μόνο στις πιο σημαντικές λειτουργίες και παραμέτρους.

Τα Windows προσφέρουν πολυάριθμους μηχανισμούς συγχρονισμού και επικοινωνίας για να ικανοποιήσουν μια μεγάλη ποικιλία αναγκών.

Η βασική μονάδα εκτέλεσης στα Windows είναι το νήμα. Ένα ή περισσότερα νήματα μπορούν να τρέξουν σε μία διαδικασία.

Οι λειτουργίες των Windows χρησιμοποιούν μεγάλα, περιγραφικά ονόματα. Τα ακόλουθα παραδείγματα ονομάτων συναρτήσεων απεικονίζουν όχι μόνο τις συμβάσεις ονομασίας, αλλά και την ευελιξία των λειτουργιών των Windows:

Υπάρχουν επίσης αρκετές συμβάσεις που διέπουν τη χρήση ονομάτων τύπων:

Τα ονόματα των προκαθορισμένων τύπων δεδομένων που απαιτούνται από το API είναι επίσης περιγραφικά και πρέπει να είναι με κεφαλαία γράμματα.

Οι πιο συνηθισμένοι τύποι δεδομένων περιλαμβάνουν:

BOOL (ορίζεται ως ένα αντικείμενο 32 bit σχεδιασμένο να διατηρεί μια μεμονωμένη τιμή Boole)

DWORD (πανταχού παρόν ακέραιος 32-bit χωρίς υπογραφή)

LPTSTR (δείκτης σε μια συμβολοσειρά χαρακτήρων 8 ή 16 bit)

LPSECURITY_ATTRIBUES

Θα εξοικειωθείτε με πολλά άλλα είδη δεδομένων καθώς παρουσιάζεται το υλικό.

Τα ονόματα των προκαθορισμένων τύπων δείκτη δεν χρησιμοποιούν τον τελεστή * και αντικατοπτρίζουν πρόσθετες διαφορές μεταξύ δεικτών διαφορετικών τύπων, όπως οι τύποι LPTSTR (που ορίζονται ως TCHAR *) και LPCTSTR (ορίζονται ως const TCHAR *). Σημείωμα.Ο τύπος TCHAR μπορεί να υποδηλώνει είτε τον τύπο κανονικού χαρακτήρα char είτε τον τύπο wchar_t δύο byte.

Υπάρχουν επίσης ορισμένες συμβάσεις σχετικά με τη χρήση ονομάτων μεταβλητών, τουλάχιστον σε πρωτότυπα συναρτήσεων. Έτσι, το όνομα lpszFileName αντιστοιχεί σε έναν "μακρύ δείκτη σε μια συμβολοσειρά με μηδενικό τερματισμό" που περιέχει το όνομα του αρχείου. Αυτό το παράδειγμα επεξηγεί τη χρήση της λεγόμενης «ουγγρικής σημειογραφίας», την οποία γενικά δεν προσπαθούμε να τηρήσουμε σε αυτό το βιβλίο. Ομοίως, το dwAccess είναι μια διπλή λέξη (32 bit) που περιέχει σημαίες δικαιωμάτων αρχείων, όπου το "dw" σημαίνει "διπλή λέξη".

Σημείωμα

Θα είναι πολύ χρήσιμο αν κοιτάξετε τα αρχεία κεφαλίδας συστήματος (συμπεριλαμβάνονται), τα οποία περιέχουν ορισμούς συναρτήσεων, σταθερών, σημαιών, κωδικών σφάλματος και παρόμοια. Πολλά από τα αρχεία ενδιαφέροντος, όπως αυτά που παρέχονται παρακάτω ως παραδείγματα, αποτελούν μέρος του περιβάλλοντος Microsoft Visual C++ και συνήθως εγκαθίστανται στο Program Files\Microsoft Visual Studio.NET\Vc7\PlatformSDK\Include (ή Program Files\Microsoft Visual Studio\VC98\Include σε περίπτωση VC++ 6.0):

WINDOWS.H (το αρχείο που διασφαλίζει ότι περιλαμβάνονται όλα τα άλλα αρχεία κεφαλίδας)

Τέλος, αν και το αρχικό Win32 API σχεδιάστηκε από την αρχή για να είναι μια εντελώς ανεξάρτητη διεπαφή, σχεδιάστηκε για να είναι συμβατό με το Winl6 API που περιλαμβανόταν στα Windows 3.1. Αυτό οδήγησε σε ορισμένες ενοχλητικές συνέπειες από την άποψη ενός προγραμματιστή:

Υπάρχουν στοιχεία αναχρονισμού στα ονόματα τύπων, όπως στην περίπτωση των τύπων LPTSTR και LPDWORD, που αναφέρονται σε έναν «μακροχρόνιο δείκτη», ο οποίος είναι ένας απλός δείκτης 32 ή 64 bit. Δεν χρειάζεται κανένας άλλος τύπος δείκτη. Μερικές φορές το στοιχείο "μακρύ" παραλείπεται, οπότε, για παράδειγμα, οι τύποι LPVOID και PVOID είναι ισοδύναμοι.

Ορισμένες συμβολικές σταθερές, όπως το WIN32_FIND_DATA, έχουν ένα στοιχείο "WIN32" στα ονόματά τους, αν και οι ίδιες σταθερές χρησιμοποιούνται επίσης στο Win64.

Αν και αυτό το ζήτημα συμβατότητας προς τα πίσω δεν είναι πλέον σχετικό, άφησε πίσω του μια σειρά από λειτουργίες 16-bit, καμία από τις οποίες δεν χρησιμοποιείται σε αυτό το βιβλίο, αν και μπορεί να φαίνονται σημαντικές. Ένα παράδειγμα είναι η συνάρτηση OpenFile, η οποία, όπως υποδηλώνει το όνομά της, χρησιμοποιείται για το άνοιγμα αρχείων, ενώ στην πραγματικότητα θα πρέπει πάντα να χρησιμοποιείτε μόνο τη συνάρτηση CreateFile για να ανοίγετε υπάρχοντα αρχεία.

Προετοιμασία για εργασία με το Win64

Η διεπαφή Win64, η οποία κατά τη στιγμή της γραφής υποστηριζόταν από τα Windows XP και τον Windows Server 2003 στην οικογένεια επεξεργαστών AMD64 της AMD (Opteron και Athlon 64) και στην οικογένεια επεξεργαστών Itanium της Intel (παλαιότερα με την κωδική ονομασία Merced, McKinley, Madison και IA-64 ), θα παίζει ολοένα και πιο σημαντικό ρόλο στη δημιουργία μεγάλων εφαρμογών. Οι σημαντικές διαφορές μεταξύ Win32 και Win64 οφείλονται σε διαφορές στο μέγεθος των δεικτών (64 bit στο Win64) και στο μέγεθος του διαθέσιμου χώρου εικονικών διευθύνσεων.

Οι προκλήσεις της μεταφοράς εφαρμογών στην πλατφόρμα Win64 συζητούνται σε όλο το βιβλίο και τα προγράμματα οργανώνονται έτσι ώστε να μπορούν να δημιουργηθούν ως εφαρμογές Win64 καθορίζοντας απλώς τις κατάλληλες παραμέτρους κατά το χρόνο μεταγλώττισης. Στα έργα με παραδείγματα προγραμμάτων που βρίσκονται στο web-host του βιβλίου, σε απαραίτητες περιπτώσεις, είναι δυνατή η εμφάνιση μηνυμάτων που προειδοποιούν για την εμφάνιση προβλημάτων κατά τη μετάβαση στα 64 bit, αλλά οι περισσότερες καταστάσεις (αν και όχι όλες) που θα μπορούσαν να οδηγήσουν σε η δημιουργία τέτοιων μηνυμάτων είναι από τους κωδικούς του προγράμματος εξαιρούνται.

Από την πλευρά ενός προγραμματιστή, οι κύριες διαφορές κατά τη μετάβαση στο Win64 οφείλονται στο μέγεθος των δεικτών και στην ανάγκη να θυμόμαστε ότι τα μήκη ενός δείκτη και μιας ακέραιας μεταβλητής (LONG, DWORD, κ.λπ.) δεν χρειάζεται να είναι το ίδιο. Για το σκοπό αυτό, για παράδειγμα, ορίζονται οι τύποι DWORD32 και DWORD64, οι οποίοι σας επιτρέπουν να ελέγχετε ρητά το μέγεθος των μεταβλητών. Δύο άλλοι τύποι, οι POINTER_32 και POINTER_64, σας επιτρέπουν να ελέγχετε το μέγεθος των δεικτών.

Όπως θα δείτε, με πολύ λίγη προσπάθεια είναι δυνατό να εκτελεστούν προγράμματα τόσο σε Win32 όσο και σε Win64, γι' αυτό συχνά αναφερόμαστε στο API απλώς ως Windows ή, μερικές φορές, ως Win32. Για περισσότερες πληροφορίες σχετικά με το Win64, ανατρέξτε στο Κεφάλαιο 16, το οποίο περιλαμβάνει μια συζήτηση σχετικά με θέματα συμβατότητας πηγής και δυαδικής έκδοσης.

Οι προγραμματιστές που εργάζονται με UNIX και Linux θα συναντήσουν μια σειρά από ενδιαφέρουσες δυνατότητες στα Windows. Έτσι, στα Windows, οι λαβές HANDLE είναι «αδιαφανείς». Δεν είναι μια σειρά από διαδοχικά αυξανόμενους ακεραίους. Ταυτόχρονα, για παράδειγμα, στο UNIX, οι περιγραφείς αρχείων 0, 1 και 2 έχουν έναν ειδικό σκοπό, ο οποίος πρέπει να λαμβάνεται υπόψη κατά τη σύνταξη προγραμμάτων. Δεν θα βρείτε κάτι τέτοιο στα Windows.

Πολλές από τις διακρίσεις, όπως η γραμμή μεταξύ των αναγνωριστικών διεργασιών και των χειρισμών αρχείων, είναι θολή στα Windows. Στα Windows, τα αντικείμενα και των δύο τύπων περιγράφονται με λαβές τύπου HANDLE. Πολλές σημαντικές λειτουργίες μπορούν εξίσου να χρησιμοποιούν λαβές σε αρχεία, διεργασίες, συμβάντα, σωλήνες και άλλα αντικείμενα.

Οι προγραμματιστές UNIX που είναι συνηθισμένοι σε σύντομα ονόματα συναρτήσεων και παραμέτρων, χρησιμοποιώντας κυρίως πεζά γράμματα, θα πρέπει να προσαρμοστούν στο πιο εκτεταμένο στυλ των Windows. Το στυλ των Windows είναι κοντά στο στυλ διεπαφής της Hewlett Packard (πρώην DEC και Compaq). Για προγραμματιστές που εργάζονται με OpenVMS, πολλά θα φαίνονται γνωστά. Μέρος του λόγου αυτής της ομοιότητας μεταξύ OpenVMS και Windows είναι ότι ο David Cutler, ο δημιουργός της αρχικής αρχιτεκτονικής VMS, σκόπευε να παίξει τον ίδιο ρόλο με το NT ή τα Windows.

Οι ριζικές διαφορές αφορούν μια τόσο γνωστή έννοια όπως οι διαδικασίες. Στα Windows, οι διεργασίες δεν έχουν ιδιότητες κληρονομικότητας, αν και μπορούν να οργανωθούν ως αντικείμενα εργασίας.

Τέλος, θα πρέπει να σημειωθεί ότι στα αρχεία κειμένου των Windows, το τέλος μιας γραμμής σημειώνεται με την ακολουθία χαρακτήρων ελέγχου CR-LF και όχι LF, όπως συνηθίζεται στο UNIX.

Σχετικά με τη σκοπιμότητα χρήσης συναρτήσεων της τυπικής βιβλιοθήκης C για επεξεργασία αρχείων

Παρά τη μοναδικότητα των Windows, το παλιό καλό C και η τυπική βιβλιοθήκη του ANSI C μπορούν ακόμα να χρησιμοποιηθούν με επιτυχία για τις περισσότερες εργασίες επεξεργασίας αρχείων. Επιπλέον, η βιβλιοθήκη C (συχνά θα παραλείψουμε την αναφορά στη συμμόρφωσή της με το πρότυπο ANSI C) περιέχει έναν μεγάλο αριθμό πολύ απαραίτητων λειτουργιών, οι οποίες δεν έχουν ανάλογες μεταξύ των κλήσεων συστήματος. Αυτές περιλαμβάνουν, για παράδειγμα, λειτουργίες που περιγράφονται σε αρχεία κεφαλίδας , Και , καθώς και μορφοποιημένες λειτουργίες εισαγωγής/εξόδου χαρακτήρων. Ταυτόχρονα, υπάρχουν επίσης λειτουργίες όπως fopen και fread, που περιγράφονται στο αρχείο κεφαλίδας , για τα οποία υπάρχουν στενές αντίστοιχες κλήσεις συστήματος.

Σε ποιες περιπτώσεις, κατά την επεξεργασία αρχείων, μπορείτε να τα βγάλετε πέρα ​​με τη βιβλιοθήκη C και σε ποιες περιπτώσεις είναι απαραίτητο να χρησιμοποιήσετε κλήσεις συστήματος των Windows; Το ίδιο ερώτημα μπορεί να τεθεί σχετικά με τη χρήση των ροών εισόδου/εξόδου C++ ή του συστήματος εισόδου/εξόδου που παρέχεται από την πλατφόρμα .NET. Δεν υπάρχουν εύκολες απαντήσεις σε αυτές τις ερωτήσεις, αλλά εάν η φορητότητα λογισμικού σε πλατφόρμες που δεν είναι Windows είναι προτεραιότητα, τότε σε περιπτώσεις όπου η εφαρμογή απαιτεί μόνο επεξεργασία αρχείων και όχι, για παράδειγμα, διαχείριση διεργασιών ή άλλες δυνατότητες ειδικά για Windows, θα πρέπει να προτιμάται να δοθεί στη βιβλιοθήκη C και στις ροές εισόδου/εξόδου C++. Ταυτόχρονα, πολλοί προγραμματιστές έχουν κάνει στο παρελθόν προσπάθειες να αναπτύξουν συστάσεις σχετικά με την επάρκεια χρήσης της βιβλιοθήκης C σε ορισμένες περιπτώσεις, και οι ίδιες συστάσεις θα πρέπει να ισχύουν για τα Windows. Επιπλέον, δεδομένων των δυνατοτήτων επέκτασης της λειτουργικότητας, καθώς και της αύξησης της παραγωγικότητας και της ευελιξίας των προγραμμάτων που παρέχονται από τα Windows, είναι συχνά πιο βολικό ή ακόμα και απαραίτητο να κοιτάξετε πέρα ​​από τη βιβλιοθήκη C, καθώς σταδιακά θα πειστείτε ότι ξεκινώντας από το Κεφάλαιο 3 Μεταξύ των δυνατοτήτων των Windows, οι δυνατότητες που υποστηρίζονται από τη βιβλιοθήκη C περιλαμβάνουν κλείδωμα και αντιστοίχιση αρχείων (απαραίτητα για κοινή χρήση περιοχών μνήμης), ασύγχρονη είσοδος/έξοδος, τυχαία πρόσβαση σε εξαιρετικά μεγάλα αρχεία (4 GB και άνω) και επικοινωνία μεταξύ διεργασιών. .

Για απλά προγράμματα, θα είναι αρκετά για εσάς να χρησιμοποιήσετε τις λειτουργίες της βιβλιοθήκης C που έχουν σχεδιαστεί για να λειτουργούν με αρχεία. Χρησιμοποιώντας τη βιβλιοθήκη C, μπορείτε να γράψετε μια φορητή εφαρμογή ακόμη και χωρίς να μάθετε τα Windows, αλλά οι επιλογές σας θα είναι περιορισμένες. Έτσι, στο Κεφάλαιο 5, η αντιστοίχιση αρχείων χρησιμοποιήθηκε για τη βελτίωση της απόδοσης του προγράμματος και την απλοποίηση του προγραμματισμού, αλλά η βιβλιοθήκη C δεν παρέχει τέτοιες δυνατότητες.

Τι απαιτείται για να δουλέψετε με αυτό το βιβλίο

Παρακάτω παρατίθενται όλα όσα χρειάζεστε για να δημιουργήσετε και να εκτελέσετε τα παραδείγματα σε αυτό και τα επόμενα κεφάλαια του βιβλίου.

Φυσικά, πρώτα απ 'όλα, θα χρειαστείτε όλη την εμπειρία σας στην ανάπτυξη εφαρμογών. Υποτίθεται επίσης ότι είστε εξοικειωμένοι με τη γλώσσα C. Ωστόσο, πριν ξεκινήσετε να λύνετε τις ασκήσεις και να αναλύετε τα παραδείγματα, πρέπει να βεβαιωθείτε ότι διαθέτετε όλο το απαραίτητο υλικό και λογισμικό, η λίστα των οποίων δίνεται παρακάτω.

Σύστημα με εγκατεστημένο λειτουργικό σύστημα Windows.

Ένας μεταγλωττιστής C και οποιοδήποτε κατάλληλο περιβάλλον ανάπτυξης εφαρμογών, όπως το Microsoft Visual Studio .NET ή το Microsoft Visual C++ έκδοση 6.0. Υπάρχουν επίσης συστήματα ανάπτυξης εφαρμογών από άλλους προμηθευτές και παρόλο που δεν έχουμε δοκιμάσει τα παραδείγματα στο βιβλίο σε αυτά, μάθαμε από μηνύματα ηλεκτρονικού ταχυδρομείου από πολλούς αναγνώστες ότι τα παραδείγματα, ακόμη και μετά από μικρές αλλαγές σε αυτά, σε ορισμένες περιπτώσεις λειτουργούσαν με επιτυχία ακόμη και όταν χρησιμοποιείτε άλλα συστήματα. Επιπλέον, το Παράρτημα Α περιέχει πληροφορίες σχετικά με τη χρήση εργαλείων ανοιχτού κώδικα. Σημείωμα.Η εστίασή μας θα είναι στην ανάπτυξη εφαρμογών κονσόλας των Windows, και επομένως οι δυνατότητες του Microsoft Visual Studio .NET δεν θα χρησιμοποιηθούν πλήρως.

Επαρκής ποσότητα μνήμης RAM και ελεύθερος χώρος στον σκληρό δίσκο για την ανάπτυξη προγραμμάτων. Σχεδόν οποιοδήποτε σύστημα που διατίθεται στο εμπόριο θα σας δώσει αρκετή μνήμη, χώρο στο δίσκο και ισχύ επεξεργασίας για να εκτελέσετε τα παραδείγματα και το περιβάλλον ανάπτυξης εφαρμογών, αλλά θα πρέπει πρώτα να ελέγξετε τις απαιτήσεις πόρων του περιβάλλοντος.

Μονάδα CD, σύστημα ή δίκτυο, για εγκατάσταση περιβάλλοντος ανάπτυξης εφαρμογών.

Ηλεκτρονική τεκμηρίωση όπως αυτή που συνοδεύει το Microsoft Visual C++. Συνιστάται να εγκαταστήσετε αυτήν την τεκμηρίωση στον σκληρό σας δίσκο, καθώς θα χρειαστεί συχνή πρόσβαση σε αυτήν. Μπορείτε πάντα να λάβετε πρόσθετες πληροφορίες στον ιστότοπο της Microsoft.

Παράδειγμα: απλή διαδοχική αντιγραφή αρχείου

Οι ακόλουθες ενότητες παρέχουν παραδείγματα σύντομων προγραμμάτων που υλοποιούν απλή διαδοχική αντιγραφή των περιεχομένων ενός αρχείου με τρεις διαφορετικούς τρόπους:

1. Χρήση της βιβλιοθήκης C.

2. Χρήση των Windows.

3. Χρήση της βοηθητικής λειτουργίας των Windows - CopyFile.

Εκτός από την παροχή σύγκρισης διαφορετικών μοντέλων προγραμματισμού, αυτά τα παραδείγματα δείχνουν επίσης τις δυνατότητες και τους περιορισμούς της βιβλιοθήκης C και των Windows. Εναλλακτικές υλοποιήσεις θα ενίσχυαν το πρόγραμμα αυξάνοντας την απόδοση και την ευελιξία του.

Η διαδοχική επεξεργασία αρχείων είναι η απλούστερη, η πιο κοινή και η πιο σημαντική από τις δυνατότητες που παρέχει οποιοδήποτε λειτουργικό σύστημα και σχεδόν κάθε μεγάλο πρόγραμμα υφίσταται απαραίτητα τουλάχιστον μερικά αρχεία αυτού του τύπου επεξεργασίας. Επομένως, ένα απλό πρόγραμμα διαχείρισης αρχείων παρέχει μια εξαιρετική ευκαιρία να εξοικειωθείτε με τα Windows και τις συμβάσεις τους.

Η αντιγραφή αρχείων, συχνά σε συνδυασμό με την ενημέρωση του περιεχομένου τους, και η συγχώνευση ταξινομημένων αρχείων είναι κοινές μορφές διαδοχικής επεξεργασίας αρχείων. Παραδείγματα άλλων εφαρμογών που έχουν διαδοχική πρόσβαση στα αρχεία περιλαμβάνουν μεταγλωττιστές και εργαλεία επεξεργασίας κειμένου.

Αν και η διαδοχική επεξεργασία αρχείων είναι εννοιολογικά απλή, η εφαρμογή αυτής της διαδικασίας αποτελεσματικά και με τη βέλτιστη ταχύτητα μπορεί να είναι δύσκολη. Αυτό μπορεί να απαιτεί τη χρήση επικαλυπτόμενων I/O, αντιστοίχισης αρχείων, ροών και άλλων προηγμένων τεχνικών.

Η αντιγραφή αρχείων από μόνη της δεν είναι ιδιαίτερα ενδιαφέρουσα, αλλά η σύγκριση προγραμμάτων όχι μόνο θα σας επιτρέψει να αξιολογήσετε γρήγορα πόσο διαφορετικά συστήματα διαφέρουν μεταξύ τους, αλλά θα χρησιμεύσει επίσης ως καλή δικαιολογία για να εξοικειωθείτε με τα Windows. Τα ακόλουθα παραδείγματα υλοποιούν μια περιορισμένη έκδοση μιας από τις εντολές του UNIX, cp, η οποία αντιγράφει ένα αρχείο σε άλλο και απαιτεί τον καθορισμό ονομάτων αρχείων στη γραμμή εντολών. Στα παραπάνω προγράμματα οργανώνεται μόνο ο απλούστερος έλεγχος των σφαλμάτων που μπορεί να προκύψουν στο στάδιο της εκτέλεσης και τα υπάρχοντα αρχεία απλώς αντικαθίστανται. Αυτές και άλλες ελλείψεις θα ληφθούν υπόψη σε επόμενες υλοποιήσεις των Windows αυτού και άλλων προγραμμάτων. Σημείωμα.Μια υλοποίηση του προγράμματος για το UNIX βρίσκεται στον ιστότοπο του βιβλίου.

Αντιγραφή αρχείων χρησιμοποιώντας την τυπική βιβλιοθήκη C

Όπως μπορείτε να δείτε από το κείμενο του προγράμματος 1.1, η τυπική βιβλιοθήκη C υποστηρίζει αντικείμενα ροής FILE I/O που μοιάζουν, αν και λιγότερο γενικά, με τα αντικείμενα HANDLE των Windows που εισήχθησαν στο Πρόγραμμα 1.2.

Πρόγραμμα 1.1. cpc: αντιγραφή αρχείων χρησιμοποιώντας τη βιβλιοθήκη C
/* Κεφάλαιο 1. Βασικό πρόγραμμα αντιγραφής αρχείων cp. Υλοποίηση με χρήση της βιβλιοθήκης C */
/* cp file1 file2: Αντιγραφή αρχείου1 στο αρχείο2. */

int main(int argc, char *argv) (
printf("Χρήση: αρχείο src1 αρχείο2\n");
in_file = fopen(argv, "rb");
out_file = fopen(argv, "wb");
/* Επεξεργαστείτε το αρχείο εισόδου μία εγγραφή τη φορά. */
ενώ ((bytes_in = fread(rec, 1, BUF_SIZE, in_file)) > 0) (
bytes_out = fwrite(rec, 1, bytes_in, out_file);
perror ("Μοιραίο σφάλμα εγγραφής.");

Αυτό το απλό παράδειγμα επεξηγεί μια σειρά από κοινές υποθέσεις και συμβάσεις προγραμματισμού που δεν ισχύουν πάντα στα Windows.

1. Τα ανοιχτά αντικείμενα αρχείου αναγνωρίζονται από δείκτες στις δομές FILE (το UNIX χρησιμοποιεί περιγραφείς ακέραιων αρχείων). Ο δείκτης NULL αντιστοιχεί σε ένα ανύπαρκτο αντικείμενο. Ουσιαστικά, οι δείκτες είναι ένας τύπος περιγραφικού αντικειμένου για ανοιχτά αρχεία.

2. Η κλήση της συνάρτησης fopen καθορίζει εάν το αρχείο θα πρέπει να υποβληθεί σε επεξεργασία ως αρχείο κειμένου ή ως δυαδικό αρχείο. Τα αρχεία κειμένου περιέχουν ακολουθίες χαρακτήρων για το σύστημα που χρησιμοποιούνται, για παράδειγμα, για να υποδείξουν το τέλος μιας γραμμής. Σε πολλά συστήματα, συμπεριλαμβανομένων των Windows, κατά τις λειτουργίες εισόδου/εξόδου, καθεμία από αυτές τις ακολουθίες μετατρέπεται αυτόματα σε μηδενικό χαρακτήρα, ο οποίος ερμηνεύεται στο C ως τερματιστής γραμμής και αντίστροφα. Στο παράδειγμά μας, και τα δύο αρχεία ανοίγονται ως δυαδικά αρχεία.

3. Η διάγνωση σφαλμάτων υλοποιείται χρησιμοποιώντας τη συνάρτηση σφάλματος, η οποία, με τη σειρά της, λαμβάνει πληροφορίες σχετικά με τη φύση της αποτυχίας που παρουσιάζεται κατά την κλήση της συνάρτησης fopen από την καθολική μεταβλητή errno. Αντίθετα, θα μπορούσατε να χρησιμοποιήσετε τη συνάρτηση ferror, η οποία επιστρέφει έναν κωδικό σφάλματος που δεν σχετίζεται με το σύστημα, αλλά με το αντικείμενο FILE.

4. Οι συναρτήσεις fread και fwrite επιστρέφουν τον αριθμό των byte που επεξεργάζονται απευθείας, παρά μέσω ενός ορίσματος, το οποίο έχει σημαντικό αντίκτυπο στη λογική της οργάνωσης του προγράμματος. Μια μη αρνητική επιστρεφόμενη τιμή υποδηλώνει μια επιτυχημένη λειτουργία ανάγνωσης, ενώ μια μηδενική τιμή επιστροφής υποδηλώνει μια προσπάθεια ανάγνωσης της ένδειξης τέλους αρχείου.

5. Η συνάρτηση fclose μπορεί να εφαρμοστεί μόνο σε αντικείμενα τύπου FILE (μια παρόμοια δήλωση ισχύει για τους περιγραφείς αρχείων UNIX).

6. Οι λειτουργίες I/O εκτελούνται σε σύγχρονη λειτουργία, δηλαδή, για να συνεχίσει να εκτελείται το πρόγραμμα, πρέπει να περιμένει να ολοκληρωθεί η λειτουργία I/O.

7. Για την εμφάνιση μηνυμάτων σφάλματος, είναι βολικό να χρησιμοποιήσετε τη λειτουργία εισόδου/εξόδου printf που περιλαμβάνεται στη βιβλιοθήκη C, η οποία θα χρησιμοποιηθεί ακόμη και στο πρώτο παράδειγμα ενός προγράμματος των Windows.

Μια υλοποίηση που χρησιμοποιεί τη βιβλιοθήκη C έχει το πλεονέκτημα ότι είναι φορητή σε UNIX, Windows και άλλα συστήματα που υποστηρίζουν το πρότυπο ANSI C Επιπλέον, όπως φαίνεται στο Παράρτημα Β, η επιλογή που χρησιμοποιεί συναρτήσεις I/O έχει πλεονέκτημα απόδοσης βιβλιοθήκες C δεν είναι σε καμία περίπτωση κατώτερες από άλλες επιλογές υλοποίησης. Ωστόσο, σε αυτήν την περίπτωση, τα προγράμματα αναγκάζονται να περιοριστούν σε σύγχρονες λειτουργίες εισόδου/εξόδου, αν και ο αντίκτυπος αυτού του περιορισμού θα μετριαστεί κάπως με τη χρήση νημάτων των Windows (ξεκινώντας από το Κεφάλαιο 7).

Όπως και τα ισοδύναμα UNIX, τα προγράμματα που βασίζονται στις συναρτήσεις αρχείων της βιβλιοθήκης C είναι ικανά να εκτελούν λειτουργίες τυχαίας πρόσβασης σε αρχεία (χρησιμοποιώντας τη συνάρτηση fseek ή, στην περίπτωση αρχείων κειμένου, τις συναρτήσεις fsetpos και fgetpos), αλλά αυτό έχει ήδη γίνει ένα ανώτατο όριο πολυπλοκότητας για τις λειτουργίες I/O της τυπικής βιβλιοθήκης C, πάνω από το οποίο δεν μπορούν να ανέβουν. Ωστόσο, το Visual C++ παρέχει μη τυπικές επεκτάσεις που μπορούν, για παράδειγμα, να υποστηρίξουν το κλείδωμα αρχείων. Τέλος, η βιβλιοθήκη C δεν σας επιτρέπει να διαχειρίζεστε λειτουργίες ασφαλείας αρχείων.

Συνοψίζοντας, εάν το απλό σύγχρονο αρχείο ή εισόδου/εξόδου κονσόλας είναι το μόνο που χρειάζεστε, τότε θα πρέπει να χρησιμοποιήσετε τη βιβλιοθήκη C για να γράψετε φορητά προγράμματα που θα εκτελούνται στα Windows.

Αντιγραφή αρχείων με χρήση Windows

Το Πρόγραμμα 1.2 επιλύει το ίδιο πρόβλημα αντιγραφής αρχείων, αλλά το κάνει χρησιμοποιώντας το API των Windows και οι βασικές τεχνικές, το στυλ και οι συμβάσεις που απεικονίζονται από αυτό το πρόγραμμα θα χρησιμοποιηθούν σε αυτό το βιβλίο.

Πρόγραμμα 1.2. cpW: αντιγραφή αρχείων με χρήση Windows, πρώτη υλοποίηση
/* Κεφάλαιο 1. Βασικό πρόγραμμα αντιγραφής αρχείων cp. Υλοποίηση με χρήση Windows. */
/* cpW file1 file2: Αντιγραφή αρχείου1 στο αρχείο2. */

printf("Χρήση: αρχείο cpW1 αρχείο2\n");
hIn = CreateFile(argv, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
εάν (hIn == INVALID_HANDLE_VALUE) (
printf("Δεν είναι δυνατό το άνοιγμα του αρχείου εισόδου. Σφάλμα: %x\n", GetLastError());
hOut = CreateFile(argv, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
εάν (hOut == INVALID_HANDLE_VALUE) (
printf("Δεν είναι δυνατό το άνοιγμα του αρχείου εξόδου. Σφάλμα: %x\n", GetLastError());
ενώ (ReadFile(hIn, Buffer, BUF_SIZE, &nIn, NULL) && nIn > 0) (
WriteFile(hOut, Buffer, nIn, &nOut, NULL);
printf("Μοιραίο σφάλμα εγγραφής: %x\n", GetLastError());

Αυτό το απλό παράδειγμα επεξηγεί ορισμένα από τα χαρακτηριστικά του προγραμματισμού στο περιβάλλον των Windows, τα οποία θα συζητήσουμε λεπτομερώς στο Κεφάλαιο 2.

1. Το πρόγραμμα περιλαμβάνει πάντα ένα αρχείο , το οποίο περιέχει όλους τους απαραίτητους ορισμούς των λειτουργιών και των τύπων δεδομένων των Windows.

2. Όλα τα αντικείμενα των Windows αναγνωρίζονται από μεταβλητές τύπου Handle και τα περισσότερα αντικείμενα μπορούν να χρησιμοποιούν την ίδια γενική λειτουργία CloseHandle.

3. Συνιστάται να κλείσετε όλες τις προηγουμένως ανοιχτές λαβές εάν δεν χρειάζονται πλέον για να ελευθερωθούν πόροι. Ταυτόχρονα, όταν οι διεργασίες τερματίζονται, οι περιγραφείς που σχετίζονται με αυτές κλείνουν αυτόματα από το ΛΣ και αν δεν απομένει ούτε ένας περιγραφέας που να αναφέρεται σε ένα αντικείμενο, το ΛΣ καταστρέφει αυτό το αντικείμενο και απελευθερώνει τους αντίστοιχους πόρους. (Σημείωμα.Κατά κανόνα, τα αρχεία δεν καταστρέφονται με αυτόν τον τρόπο.)

4. Τα Windows ορίζουν πολλές συμβολικές σταθερές και σημαίες. Συνήθως έχουν μεγάλα ονόματα, που συχνά εξηγούν τον σκοπό του αντικειμένου. Χαρακτηριστικό παράδειγμα είναι τα ονόματα INVALID_HANDLE_VALUE και GENERIC_READ.

5. Οι συναρτήσεις ReadFile και WriteFile επιστρέφουν τιμές Boole, όχι τον αριθμό των byte που υποβάλλονται σε επεξεργασία, για τα οποία χρησιμοποιούνται τα ορίσματα συνάρτησης. Αυτό αλλάζει τη λογική του πώς λειτουργούν οι κύκλοι με συγκεκριμένο τρόπο. Μια τιμή πλήθους byte μηδέν υποδηλώνει μια προσπάθεια ανάγνωσης ενός σημείου τέλους αρχείου και δεν θεωρείται σφάλμα.

6. Η συνάρτηση GetLastError σάς επιτρέπει να λαμβάνετε κωδικούς σφάλματος συστήματος που αντιπροσωπεύονται από τιμές τύπου DWORD σε οποιοδήποτε σημείο του προγράμματος. Το Πρόγραμμα 1.2 δείχνει πώς να οργανώσετε την έξοδο των μηνυμάτων σφάλματος κειμένου που δημιουργούνται από τα Windows.

7. Τα Windows NT διαθέτουν πιο ισχυρή προστασία αρχείων, όπως περιγράφεται στο Κεφάλαιο 15. Σε αυτό το παράδειγμα, το αρχείο εξόδου δεν προστατεύεται.

8. Λειτουργίες όπως το CreateFile έχουν ένα πλούσιο σύνολο πρόσθετων παραμέτρων, αλλά αυτό το παράδειγμα χρησιμοποιεί τις προεπιλεγμένες τιμές.

Αντιγραφή αρχείων με χρήση μιας δυνατότητας Βοήθειας των Windows

Για να βελτιώσετε την εμπειρία σας, τα Windows παρέχουν πολλές λειτουργίες ευκολίας που συνδυάζουν πολλές άλλες λειτουργίες για να σας βοηθήσουν να εκτελέσετε κοινές εργασίες προγραμματισμού. Σε ορισμένες περιπτώσεις, η χρήση αυτών των δυνατοτήτων μπορεί να οδηγήσει σε βελτιωμένη απόδοση (βλ. Παράρτημα Β). Για παράδειγμα, χάρη στη χρήση της λειτουργίας CopyFile, το πρόγραμμα αντιγραφής αρχείων (πρόγραμμα 1.3) απλοποιείται πολύ. Μεταξύ άλλων, αυτό μας γλιτώνει από το να ανησυχούμε για το buffer, το μέγεθος του οποίου ορίστηκε αυθαίρετα στο 256 στα δύο προηγούμενα προγράμματα.

Program1.3.cpCF: Αντιγραφή αρχείων με χρήση της συνάρτησης Helper των Windows
/* Κεφάλαιο 1. Βασικό πρόγραμμα αντιγραφής αρχείων cp. Μια υλοποίηση που χρησιμοποιεί τη λειτουργία CopyFile των Windows για να βελτιώσει τη χρηστικότητα και την απόδοση του προγράμματος. */
/* cpCF file1 file2: Αντιγραφή αρχείου1 στο αρχείο2. */

int main(int argc, LPTSTR argv) (
printf("Χρήση: αρχείο cpCF1 αρχείο2\n");
εάν (!CopyFile(argv, argv, FALSE)) (
printf("Σφάλμα κατά την εκτέλεση της συνάρτησης CopyFile: %x\n", GetLastError());

Περίληψη

Τα εισαγωγικά παραδείγματα, τα οποία χρησιμοποιήθηκαν ως τρία απλά προγράμματα αντιγραφής αρχείων, καταδεικνύουν πολλές από τις διαφορές που υπάρχουν μεταξύ προγραμμάτων που χρησιμοποιούν τη βιβλιοθήκη C από τη μια πλευρά και Windows από την άλλη. Οι διαφορές στην απόδοση μεταξύ των διαφόρων υλοποιήσεων αναλύονται στο Παράρτημα Β. Τα παραδείγματα που χρησιμοποιούν τα Windows απεικονίζουν το στυλ προγραμματισμού και ορισμένες από τις συμβάσεις των Windows, αλλά παρέχουν μόνο μια γεύση της λειτουργικότητας που προσφέρουν τα Windows στους προγραμματιστές.

Οι πλατφόρμες στόχου για αυτό το βιβλίο και τα παραδείγματα που περιέχει είναι συστήματα NT5 (Windows XP, 2000 και Server 2003). Ωστόσο, μεγάλο μέρος του υλικού του βιβλίου ισχύει επίσης για πρώιμες εκδόσεις συστημάτων NT και Windows 9x (95, 98 και Me).

Στα επόμενα κεφάλαια

Τα κεφάλαια 2 και 3 εξετάζουν πολύ πιο προσεκτικά τις λειτουργίες I/O και συστήματος αρχείων. Περιλαμβάνουν θέματα όπως I/O κονσόλας, χειρισμός χαρακτήρων ASCII και Unicode, χειρισμό αρχείων και καταλόγων και προγραμματισμό μητρώου. Αυτά τα κεφάλαια αναπτύσσουν βασικές τεχνικές και θέτουν τα θεμέλια για το υπόλοιπο βιβλίο.

Περαιτέρω ανάγνωση

Win32

Δύο βιβλία που διατίθενται αυτήν τη στιγμή που καλύπτουν τον προγραμματισμό των Windows από κάθε δυνατή οπτική γωνία είναι και. Ταυτόχρονα, υπάρχουν πολλά άλλα βιβλία που δεν έχουν ενημερωθεί και δεν αντικατοπτρίζουν την πρόοδο που έχει σημειωθεί από την κυκλοφορία των Windows 95 ή των Windows NT.

Υπάρχει ηλεκτρονική τεκμηρίωση βοήθειας υπερκειμένου για κάθε δυνατότητα Microsoft Visual C++, αλλά τις ίδιες πληροφορίες μπορείτε να λάβετε επισκεπτόμενοι την αρχική σελίδα της Microsoft, http://www.microsoft.com, όπου θα βρείτε μια σειρά από συνδέσμους προς τεχνικά άρθρα για διάφορα πτυχές των Windows. Ξεκινήστε με το MSDN (Δίκτυο προγραμματιστών της Microsoft) και αναζητήστε οποιοδήποτε θέμα σας ενδιαφέρει. Θα βρείτε μια τεράστια ποικιλία από επίσημη τεκμηρίωση, περιγραφές προϊόντων, παραδείγματα κώδικα και άλλες χρήσιμες πληροφορίες.

Win64

Το Win64 συζητείται σε πολλά βιβλία, αλλά εκτενές υλικό για το θέμα μπορεί να βρεθεί στην αρχική σελίδα της Microsoft.

Η αρχιτεκτονική των Windows NT και η ιστορία της ανάπτυξής τους

Οι αναγνώστες που θέλουν να μάθουν περισσότερα σχετικά με τους σχεδιαστικούς στόχους των Windows NT ή να κατανοήσουν τις βασικές αρχές που διέπουν την αρχιτεκτονική τους θα βρουν αυτό το βιβλίο χρήσιμο. Αυτό το βιβλίο καλύπτει αντικείμενα, διεργασίες, νήματα, εικονική μνήμη, τον πυρήνα και τα υποσυστήματα I/O. Ωστόσο, οι ίδιες οι λειτουργίες του API, καθώς και τα Windows 9x και CE, δεν συζητούνται σε αυτό. Σας συνιστούμε να ελέγχετε το βιβλίο που αναφέρεται κατά καιρούς για πρόσθετες πληροφορίες. Ανατρέξτε επίσης στα προηγούμενα δημοσιευμένα βιβλία και , τα οποία παρέχουν σημαντική αναδρομική ανάλυση της εξέλιξης του NT.

UNIX

Το βιβλίο, γραμμένο από τον αείμνηστο W. Richard Stevens, εξετάζει το UNIX με τους ίδιους σχεδόν όρους που χρησιμοποιεί αυτό το βιβλίο για να συζητήσει τα Windows. Το βιβλίο του Stevens εξακολουθεί να είναι η τυπική αναφορά για εργαλεία UNIX, αλλά δεν καλύπτει νήματα. Η τυποποίηση UNIX έχει εξελιχθεί, αλλά το βιβλίο του Stevens παρέχει εύχρηστους ορισμούς εργασίας για οτιδήποτε προσφέρεται στο UNIX καθώς και στο Linux. Αυτό το βιβλίο συγκρίνει τις δυνατότητες των λειτουργιών εισόδου/εξόδου του αρχείου βιβλιοθήκης C με τις λειτουργίες εισόδου/εξόδου του συστήματος UNIX, το οποίο ισχύει και για τα Windows.

Εάν ενδιαφέρεστε για συγκριτικά χαρακτηριστικά του λειτουργικού συστήματος και για μια βαθύτερη συζήτηση για το UNIX, ρίξτε μια ματιά στο βιβλίο και τη ρωσική του έκδοση, η οποία, εκτός από πολύ χρήσιμη, είναι και ενδιαφέρουσα γραφή, αν και ορισμένοι αναγνώστες μπορεί να βρουν τη θέση του συγγραφέα κάπως μεροληπτική.

Προγραμματισμός με χρήση του γραφικού περιβάλλοντος των Windows

Η διεπαφή χρήστη δεν συζητείται σε αυτό το βιβλίο. Εάν είναι απαραίτητο, μπορείτε να επικοινωνήσετε ή.

Θεωρία λειτουργικών συστημάτων

Υπάρχουν πολλά καλά εγχειρίδια για τη γενική θεωρία του λειτουργικού συστήματος. Ένα από τα πιο δημοφιλή είναι το βιβλίο.

Πρότυπη βιβλιοθήκη ANSI C

Το βιβλίο είναι ένας ολοκληρωμένος οδηγός για αυτό το θέμα. Για μια γρήγορη επισκόπηση, μπορείτε να ανατρέξετε στο βιβλίο ή στη ρωσική του έκδοση, η οποία περιέχει μια πλήρη περιγραφή της βιβλιοθήκης και παραμένει ένα κλασικό εγχειρίδιο στη γλώσσα προγραμματισμού C Αυτά τα βιβλία θα σας βοηθήσουν να αποφασίσετε εάν η βιβλιοθήκη C έχει αρκετές δυνατότητες για επίλυση τα προβλήματα επεξεργασίας αρχείων που αντιμετωπίζετε.

Windows SE

Για όσους θέλουν να εφαρμόσουν το υλικό αυτού του βιβλίου στα Windows CE, μπορούμε να προτείνουμε το βιβλίο.

Εξομοίωση Windows σε UNIX

Για περισσότερες πληροφορίες σχετικά με αυτό το θέμα και για λήψη του πακέτου Wine ανοιχτού κώδικα που σας επιτρέπει να εξομοιώσετε το API των Windows πάνω από το UNIX και το X, επισκεφθείτε τη διεύθυνση http://www.winehq.com.

Γυμνάσια

1.1. Μεταγλώττιση, σύνδεση και εκτέλεση καθενός από τα τρία προγράμματα που έχουν σχεδιαστεί για την αντιγραφή αρχείων. Άλλες πιθανές επιλογές υλοποίησης περιλαμβάνουν τη χρήση βιβλιοθηκών συμβατότητας UNIX, συμπεριλαμβανομένης της βιβλιοθήκης Microsoft Visual C++ (ένα πρόγραμμα που χρησιμοποιεί αυτήν τη βιβλιοθήκη είναι διαθέσιμο στην τοποθεσία Web του βιβλίου). Σημείωμα.Ο ιστότοπος του βιβλίου περιέχει τους πηγαίους κώδικες για όλα τα προγράμματα. Σύντομες συστάσεις σχετικά με τη σειρά χρήσης αυτών των κωδικών στα περιβάλλοντα Microsoft Visual Studio .NET και Microsoft Visual C++ 6.0 μπορείτε να βρείτε στο Παράρτημα Α.

1.2. Εξοικειωθείτε με ένα από τα περιβάλλοντα ανάπτυξης εφαρμογών, όπως το Microsoft Visual Studio .NET ή το Microsoft Visual C++. Συγκεκριμένα, μάθετε πώς να δημιουργείτε εφαρμογές κονσόλας στο περιβάλλον που έχετε επιλέξει. Για να πραγματοποιήσετε ανεξάρτητα πειράματα χρησιμοποιώντας τα προγράμματα που αναφέρονται σε αυτό το κεφάλαιο, χρησιμοποιήστε το πρόγραμμα εντοπισμού σφαλμάτων. Για οδηγίες σχετικά με το πώς να ξεκινήσετε, ανατρέξτε στο Παράρτημα Α και μπορείτε να βρείτε εκτενείς πρόσθετες πληροφορίες στην τοποθεσία της Microsoft στο Web και στην τεκμηρίωση για το περιβάλλον ανάπτυξης της εφαρμογής σας.

1.3. Στα Windows, η ακολουθία χαρακτήρων "carriage return-line feed" (CR-LF) χρησιμοποιείται ως σήμα τέλους γραμμής. Προσδιορίστε πώς θα αλλάξει η συμπεριφορά του προγράμματος 1.1 εάν το αρχείο εισόδου ανοίξει σε δυαδική λειτουργία και το αρχείο εξόδου ανοίξει σε λειτουργία κειμένου ή αντίστροφα. Πώς θα γίνει αυτό στο UNIX και σε άλλα συστήματα;

1.4. Εκτελέστε χρονομέτρηση για κάθε πρόγραμμα κατά την αντιγραφή μεγάλων αρχείων. Λάβετε σχετικά δεδομένα για όσο το δυνατόν περισσότερες διαφορετικές επιλογές και συγκρίνετε τα αποτελέσματα μεταξύ τους. Δεν χρειάζεται να τονιστεί ότι η απόδοση των προγραμμάτων εξαρτάται από πολλούς παράγοντες, ωστόσο, με την υπόθεση ότι όλες οι άλλες παράμετροι του συστήματος παραμένουν αμετάβλητες, μια σύγκριση των αποτελεσμάτων που λαμβάνονται χρησιμοποιώντας διαφορετικές παραλλαγές υλοποίησης προγράμματος μπορεί να έχει κάποια αξία. Συμβουλή.Για να διευκολυνθεί η ανάλυση των αποτελεσμάτων, τακτοποιήστε τα σε μορφή πίνακα. Ένα πρόγραμμα που παρέχει ποσοτικό έλεγχο της διάρκειας των χρονικών διαστημάτων δίνεται στο Κεφάλαιο 6 και ορισμένα πειραματικά αποτελέσματα παρουσιάζονται στο Παράρτημα Β.

Σημειώσεις:

Ωστόσο, σε εκείνα τα σημεία του βιβλίου όπου μιλάμε για εργαλεία που δεν ισχύουν στα Windows 9x, γίνονται οι κατάλληλες κρατήσεις.

Τα σημεία που αναφέρθηκαν σχετικά με το UNIX ισχύουν εξίσου για το Linux και ορισμένα άλλα συστήματα που υποστηρίζουν το POSIX API.

Μερικές φορές, αναφερόμενοι κυρίως σε διακομιστές, χωρίς όμως να αποκλείουν τις προσωπικές εφαρμογές, κάνουν λόγο για πιθανή απειλή για την κυριαρχία των Windows από το Linux. Ενώ αυτό το θέμα από μόνο του είναι εξαιρετικά ενδιαφέρον, η σκέψη για τις μελλοντικές διαδρομές ανάπτυξης συστημάτων που δεν σχετίζονται άμεσα με τα συγκριτικά πλεονεκτήματα και μειονεκτήματα των Windows και του Linux ξεφεύγει από το σκοπό αυτού του βιβλίου.

Το πόσο ποικιλόμορφο το φάσμα των συστημάτων στα οποία μπορούν να αναπτυχθούν τα Windows αποδεικνύεται από το γεγονός ότι η γκάμα των υπολογιστών που χρησιμοποιούνται για τη δοκιμή των δειγμάτων προγραμμάτων που δίνονται σε αυτό το βιβλίο εκτείνεται από ένα ξεχασμένο μοντέλο 486 με 16 MB μνήμης RAM σε τέσσερα επεξεργαστής (επεξεργαστές Xeon με συχνότητα λειτουργίας 2 GHz) Διακομιστές εταιρικής κλίμακας εξοπλισμένοι με 8 GB μνήμης RAM.

Τα πρωτόκολλα των Windows Sockets και RPC δεν αποτελούν μέρος των ίδιων των Windows, γεγονός που δεν εμπόδισε την περιγραφή των υποδοχών σε αυτό το βιβλίο, καθώς ταιριάζουν άμεσα στο πλαίσιο του γενικού θέματος που μας ενδιαφέρει και της προσέγγισης που χρησιμοποιήθηκε.

Παρά την αναλογία μεταξύ των αναφερόμενων περιγραφέων και των περιγραφέων HWND και HDC που χρησιμοποιούνται κατά τη σύνταξη προγραμμάτων GUI των Windows, υπάρχουν ορισμένες διαφορές μεταξύ τους.

Τύποι όπως το PVOID περιλαμβάνονται στα περιλαμβανόμενα αρχεία χωρίς πρόθεμα, αλλά στα παραδείγματα θα ακολουθήσουμε τους κανόνες για τη χρήση τους που έχουν υιοθετηθεί σε πολλά βιβλία και τεκμηρίωση της Microsoft.

Μπορείτε να κρίνετε πόσο γρήγορα βελτιώνονται οι δείκτες κόστους και απόδοσης τουλάχιστον από το γεγονός ότι το 1997, στην πρώτη έκδοση αυτού του βιβλίου, ο συγγραφέας, χωρίς σκιά αμηχανίας ή αμηχανίας, υπέδειξε 16 MB RAM και 256 MB μνήμης καθώς οι απαραίτητες απαιτήσεις ελεύθερος χώρος στον σκληρό σας δίσκο. Αυτή η τρίτη έκδοση του βιβλίου είναι γραμμένη σε φορητό υπολογιστή που κοστίζει λιγότερο από 1.000 $, με περισσότερο από 10 φορές την ποσότητα RAM (περισσότερο από τον απαιτούμενο χώρο στο δίσκο), 100 φορές τη χωρητικότητα του σκληρού δίσκου και 50 φορές την ταχύτητα του επεξεργαστή συγκρίσιμων συσκευών Χαρακτηριστικά του υπολογιστή 2.500$ που χρησιμοποιήθηκε για την προετοιμασία της πρώτης έκδοσης.

Το Παράρτημα Α δείχνει πώς να εξαλείψετε περιττούς ορισμούς για να επιταχύνετε τη μεταγλώττιση και να εξοικονομήσετε χώρο στο δίσκο.

Σημειώστε ότι η λογική του βρόχου εξαρτάται από την τυπική σειρά αξιολόγησης ANSI C των λογικών τελεστών "and" (&&) και "or" (||) σε κατεύθυνση από αριστερά προς τα δεξιά.

Ρωσικό βιβλίο αναφοράς για το Win32 API

Από τον κατασκευαστή fb2.

Αυτό το βιβλίο (μεταξύ άλλων) περιέχει πίνακες δυστυχώς, δεν μπορούν όλοι οι αναγνώστες να τους αναπαράγουν.

Ας δοκιμάσουμε τον αναγνώστη σας.

Αν, αντί για ένα ωραίο τραπέζι, είδατε αυτό:

1 σειρά, 1 στήλη

1 σειρά, 2 στήλες

1 σειρά, 3 στήλες

2 σειρά 1 στήλη

2 σειρά 2 στήλη

Αυτό σημαίνει ότι ο αναγνώστης του πίνακα δεν το βλέπει, κάτι που είναι κρίμα, γιατί... υπάρχουν 49 από αυτά στο βιβλίο.

Τι να κάνω;... Λοιπόν, το κάνω αυτό. Εγκατέστησα το πρόσθετο ανάγνωσης fb2 στο Mozilla Firefox και όλα τα προβλήματα λύθηκαν, φυσικά, είναι δυνατές και άλλες επιλογές...

Αυτό είναι όλο.

Καλή επιτυχία w_cat.

Από το βιβλίο Computerra Magazine No. 24 με ημερομηνία 27 Ιουνίου 2006 συγγραφέας Περιοδικό Computerra

Ο ΛΑΧΑΝΟΚΗΠΟΣ ΤΟΥ KOZLOVSKY: Ρωσική προφορά Συγγραφέας: Evgeniy Kozlovsky Αυτός ο «Κήπος του Κήπου» είναι καθαρά δημοσιογραφικός. Χωρίς καμία σύνδεση με νέα προϊόντα υψηλής τεχνολογίας. Ωστόσο, ήταν ακριβώς ένα από αυτά τα νέα προϊόντα που προκάλεσε το χλευαστικό χάος που σκοπεύω να περιγράψω εδώ -

Από το βιβλίο του Microsoft Office συγγραφέας Λεοντίεφ Βιτάλι Πέτροβιτς

"ΡΩΣΙΚΟ ΓΡΑΦΕΙΟ" - ΧΡΗΣΙΜΕΣ ΠΡΟΣΘΗΚΕΣ ...Όπως γνωρίζετε, ένα απολύτως ιδανικό σύνολο προγραμμάτων δεν υπάρχει στη φύση. Και ανεξάρτητα από το πόσο ταλαντούχο και εξειδικευμένο είναι το Microsoft Office, δεν μπορεί να κάνει τα πάντα. Αλλά, ευτυχώς για εμάς, αυτό το πακέτο λογισμικού διακρίνεται όχι μόνο από την ευφυΐα του και

Από το βιβλίο The C# 2005 Programming Language and the .NET 2.0 Platform. από τον Troelsen Andrew

Προσέγγιση C/Win32 API Παραδοσιακά, η ανάπτυξη λογισμικού για λειτουργικά συστήματα Windows περιλαμβάνει τη χρήση της γλώσσας προγραμματισμού C σε συνδυασμό με το Windows API (Application Programming Interface). Παρά το γεγονός ότι στο

Από το βιβλίο PC Magazine/RE No 08/2009 συγγραφέας Περιοδικό PC

Επικεφαλίδα Win32 Η κεφαλίδα Win32 δηλώνει ότι το δομικό στοιχείο μπορεί να φορτωθεί και να ελεγχθεί από λειτουργικά συστήματα Windows. Αυτά τα δεδομένα κεφαλίδας προσδιορίζουν επίσης τον τύπο της εφαρμογής (κονσόλα, GUI ή βιβλιοθήκη)

Από το βιβλίο Ψηφιακό περιοδικό «Computerra» Νο 26 συγγραφέας Περιοδικό Computerra

Εκτέλεση παραδοσιακών διεργασιών Win32 Η έννοια της «διαδικασίας» υπήρχε στα λειτουργικά συστήματα Windows πολύ πριν από την εμφάνιση της πλατφόρμας .NET. Με απλά λόγια, ο όρος διεργασία χρησιμοποιείται για να αναφέρεται σε ένα σύνολο πόρων (όπως εξωτερικές βιβλιοθήκες κώδικα και

Από το βιβλίο Feeling the Elephant [Σημειώσεις για την Ιστορία του Ρωσικού Διαδικτύου] συγγραφέας Κουζνέτσοφ Σεργκέι Γιούριεβιτς

Ρωσικά Android Η εταιρεία Vobis παράγει ένα σύστημα επικοινωνίας που βασίζεται στο Google Android. Το μοντέλο Highscreen PP5420 είναι κατασκευασμένο σε επεξεργαστή Qualcomm MSM7201A (528 MHz), εξοπλισμένο με 128 MB RAM, 256 MB ROM, οθόνη αφής 3 ιντσών με ανάλυση 240×400, GPS, χωρική μετατόπιση αισθητήρα G αισθητήρας - όλα είναι αρκετά μέσα

Από το βιβλίο 10 απλοί και εύκολοι τρόποι για να αυξήσετε άμεσα την κερδοφορία οποιουδήποτε εμπορικού ιστότοπου από τον Dean Terry

Ιός Win32/Stuxnet: δεν θα υπάρχουν ενημερώσεις κώδικα για τα Windows XP Igor Oskolkov Δημοσιεύθηκε στις 20 Ιουλίου 2010 Πρόσφατα, η Microsoft επιβεβαίωσε την παρουσία μιας ευπάθειας zero-day σε όλες τις εκδόσεις των Windows - από το 2000 έως την 7η. Επιπλέον, η ευπάθεια αποδείχθηκε να είναι πολύ ασυνήθιστο. Όλα ξεκίνησαν

Από το βιβλίο System Programming in Windows Environment από τον Χαρτ Τζόνσον Μ

Alexander Matrosov (ESET) σχετικά με τον ιό Win32/Stuxnet Krestnikov Evgeniy Δημοσιεύθηκε στις 21 Ιουλίου 2010 Ο ιός Win32/Stuxnet είναι ενδιαφέρον, πρώτα απ' όλα, για τον μηχανισμό διανομής του, ο οποίος εκμεταλλεύεται μια ευπάθεια στα λειτουργικά συστήματα Windows: μια ειδικά κατασκευασμένη

Από το βιβλίο XSLT Technology συγγραφέας Valikov Alexey Nikolaevich

Από το βιβλίο Μαεστρία συγγραφέας Λεμπέντεφ Αρτιόμ Αντρέεβιτς

Από το βιβλίο Firebird DATABASE DEVELOPER'S GUIDE από την Borri Helen

ΚΕΦΑΛΑΙΟ 1 Εισαγωγή στα Win32 και Win64 Σε αυτό το κεφάλαιο, θα εξοικειωθείτε με την οικογένεια λειτουργικών συστημάτων (OS) των Microsoft Windows και τη διεπαφή προγραμματισμού εφαρμογών (API) που χρησιμοποιείται από όλα τα μέλη της οικογένειας. Περιγράφει επίσης εν συντομία τα πιο πρόσφατα

Από το βιβλίο Delphi Virtual Library του συγγραφέα

Η αρχιτεκτονική του συστήματος διαχείρισης μνήμης στα Win32 και Win64 Win32 (εκεί γίνονται σημαντικές οι διαφορές μεταξύ Win32 και Win64) είναι ένα API για λειτουργικά συστήματα Windows 32-bit. Το "32-bit" εμφανίζεται όταν η διευθυνσιοδότηση μνήμης σε ότι οι δείκτες (LPSTR, LPDWORD, κ.λπ.) είναι 4 byte

Από το βιβλίο του συγγραφέα

Μεταφράσεις προτύπων στα ρωσικά; http://www.rol.ru/news/it/helpdesk/xml01.htmExtensible Markup Language (XML) 1.0 (δεύτερη έκδοση). Μετάφραση Radik Usmanov, Luxoft (IBS). http://www.rol.ru/news/it/helpdesk/xslt01.htmXSL Transformation Language (XSLT). Έκδοση 1.0. Μετάφραση Radik Usmanov, Luxoft

Από το βιβλίο του συγγραφέα

Από το βιβλίο του συγγραφέα

Σχετικά με τον επιστημονικό συντάκτη της μετάφρασης στα ρωσικά Ο Ντμίτρι Κουζμένκο σχεδιάζει και αναπτύσσει εφαρμογές βάσεων δεδομένων εδώ και 16 χρόνια. Άρχισε να συνεργάζεται με την InterBase το 1994. Το 2002, ο Ντμίτρι ίδρυσε την εταιρεία iBase (www.ibase.ru), η οποία παρέχει τεχνική υποστήριξη για την InterBase και

Από το βιβλίο του συγγραφέα

Προγραμματισμός βασισμένος στο Win32 API στους Δελφούς 1. Εισαγωγή Οποιοδήποτε σύγχρονο πρόγραμμα ή τεχνολογία λογισμικού μπορεί να αναπαρασταθεί ως μια συλλογή «στρωμάτων» λογισμικού. Κάθε ένα από αυτά τα επίπεδα κάνει τη δική του δουλειά, που είναι να αυξήσει το επίπεδο της αφαίρεσης



Συνιστούμε να διαβάσετε

Κορυφή