Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Δυναμικές λειτουργίες κλήσης σε DLLs

Μια βιβλιοθήκη δυναμικής σύνδεσης ή DLL , επιτρέπει σε μια εφαρμογή να φορτώσει μόνο το ελάχιστο αναγκαίο εκτελέσιμο κώδικα στη μνήμη κατά το χρόνο εκτέλεσης . Κάθε φορά που το πρόγραμμα καλεί μια συνάρτηση σε ένα αρχείο DLL , το λειτουργικό σύστημα φορτώνει το αρχείο DLL στη μνήμη σύμφωνα με τις προδιαγραφές του προγραμματιστή . Εφ 'όσον το τρέχον πρόγραμμα δεν αναφέρει μια συνάρτηση DLL , DLL ότι δεν χρειάζεται να καταλαμβάνουν χώρο . Αυτό εξοικονομεί πολύ πόρων και ενισχύει run-time απόδοση . Εάν η βιβλιοθήκη ήταν στατικές , όλος ο κώδικας της βιβλιοθήκης θα πρέπει να επισυνάπτεται στο εκτελέσιμο κώδικα του κύριου προγράμματος και το γιγαντιαίο πρόγραμμα θα πρέπει να μείνει στη μνήμη για το σύνολο του χρόνου εκτέλεσης . Το Unix ή Linux έκδοση του Windows DLL είναι μια κοινή βιβλιοθήκη , χτισμένο ανάλογα με την επέκταση " . Έτσι . " Των Windows , Unix και το Linux έχουν ειδικές συμβάσεις των λειτουργιών πρόσβαση στα αρχεία DLL ή κοινόχρηστες βιβλιοθήκες . Εξαγωγή Windows DLL Αντικείμενα Χρησιμοποιώντας dllexport Λέξη-κλειδί
Η

Για να πραγματοποιήσετε μια λειτουργία , την τάξη , το στοιχείο δεδομένων ή τη λειτουργία μέλος κατηγορίας προσιτά στο καλώντας πρόγραμμα των Windows , θα πρέπει να το εξαγάγετε πρώτα . Μια κατηγορία ή λειτουργία μπορεί να εξαχθεί κατά τον ορισμό του χρησιμοποιώντας τη λέξη-κλειδί " __declspec ( dllexport ) " πριν από τη λειτουργία , την τάξη ή όνομα μεταβλητής , ως εξής :

Void __ declspec ( dllexport ) MyClass : δημόσια CObjectName { ..... }

Στο αρχείο DLL επικεφαλίδα , βάλτε την λέξη-κλειδί πριν από το όνομα της συνάρτησης σε δήλωση πρωτότυπο . Η λέξη-κλειδί " __declspec ( dllexport ) " αποθηκεύει τα ονόματα των λειτουργιών στον πίνακα των εξαγωγών της DLL του . Για να εξοικονομήσει το χώρο που καταλαμβάνει ο πίνακας , χρησιμοποιήστε τακτικούς αριθμούς αντί για ονόματα συναρτήσεων .
Εικόνων Export Windows DLL Αντικείμενα Μέσω Ενότητα Ορισμός Αρχεία
Η

Ως εναλλακτική λύση για τη λέξη-κλειδί " __declspec ( dllexport ) , " δημιουργήσετε ένα αρχείο ορισμού μονάδα η οποία αναφέρει το όνομα της βιβλιοθήκης , προαιρετική περιγραφή και παραθέτει τα ονόματα των λειτουργιών , τις κατηγορίες και τις μεταβλητές των δεδομένων στο αρχείο DLL , μαζί με το προαιρετικό τακτικές τιμές . Η κανονική τιμή της συνάρτησης κυμαίνεται από 1 έως Ν , όπου Ν είναι ο αριθμός των λειτουργιών του DLL . Το αρχείο ορισμού μονάδα έχει την επέκταση " . . DEF " Ακολουθεί ένα παράδειγμα ενός αρχείου ορισμό της λειτουργικής μονάδας , ή ένα αρχείο DEF : .

ΒΙΒΛΙΟΘΗΚΗ ReportWriterDESCRIPTION Αυτή η δυναμική βιβλιοθήκη περιλαμβάνει τη λειτουργικότητα γεννήτρια έκθεση της MyProduct.RPT_setup @ 1RPT_design @ 2RPT_run @ @ 3RPT_print 4

Εάν δημιουργήσετε ένα Microsoft Foundation Class DLL χρησιμοποιώντας AppWizard Visual Studio , ο οδηγός θα δημιουργήσει ένα σκελετό . DEF αρχείο για το DLL και να το προσθέσετε στο έργο . Προσθήκη εγγραφές για DLL λειτουργίες σε αυτό. DEF αρχείο για την εξαγωγή τους . Η μορφή του πρωτοτύπου λειτουργία που χρησιμοποιείται από το πρόγραμμα κλήσης πρέπει να ταιριάζει με τη μορφή των καταχωρήσεων λειτουργούν στο αρχείο DEF . . Είτε χρησιμοποιούν απλούς ορισμούς και στα δύο μέρη , ή compiler ειδικά , οι ορισμοί compiler που δημιουργείται στα δύο μέρη με συνέπεια .

Η Εισαγωγές και Εξαγωγές Επέκταση DLLs
Η

Μια Microsoft Class Ίδρυμα DLL επέκτασης συνήθως αποτελείται αποκλειστικά από ανακυκλώσιμα κατηγορίες που προέρχονται από υπάρχοντες τύπους τάξη MFC . Είναι χτισμένο με ένα αρχείο DLL έκδοση του MFC , και μπορεί να κληθεί από τις εφαρμογές και τα αρχεία DLL κατασκευαστεί με αυτό το κοινό έκδοση του MFC . Για να εξαγάγετε τις κατηγορίες με τα DLL επέκτασης, χρησιμοποιήστε τη μακροεντολή " AFX_EXT_CLASS " πριν από το όνομα της κλάσης , όπως αυτό : Κατηγορία AFX_EXT_CLASS CMyViewClass : δημόσια CView { //σώμα Class } ? Εάν χρησιμοποιείτε ένα αρχείο DEF , προσθέστε τον ακόλουθο κώδικα μακροεντολής στην αρχή . και το τέλος του εκτεταμένου αρχείου DLL header : # αδιευκρ AFX_DATA # define AFX_DATA AFX_EXT_DATA // # αδιευκρ AFX_DATA # define AFX_DATA

οι οδηγίες προεπεξεργαστή βεβαιωθείτε ότι οι μεταβλητές MFC και παράγωγα και εξάγονται από την επέκταση του DLL .
εικόνων εισαγωγή DLL Λειτουργίες
Η

Η άλλη πλευρά της εξαγωγής αντικειμένων από DLL είναι να τους εισάγει σε εφαρμογές που χρησιμοποιούν το " __declspec ( DllImport ) "
εικόνων Export C Λειτουργίες για χρήση σε C ή C -κλειδιά. + + εκτελέσιμα
Η

Εάν το πρόγραμμα κλήσης ή η λειτουργία είναι γραμμένο σε C + + , χρησιμοποιήστε το" extern C " οδηγία προεπεξεργαστή στην κεφαλίδα DLL εάν οι λειτουργίες DLL γραμμένο σε C.

Εδώ είναι ένα παράδειγμα ://MyDLLFunctions.h # ifdef __ cplusplusExtern "C" { # endif__declspec ( DllImport ) void MyFunc01 ( ) ? __declspec ( DllImport ) void MyFunc02 ( ) ? # ifdef __ cplusplus } //end παρένθεση για " extern C " οδηγία # endif

Ως εναλλακτική λύση για τον καθορισμό της οδηγίας « extern C " μέσα στην κεφαλίδα DLL , μπορείτε να συμπεριλάβετε το αρχείο DLL header με ένα « Συνεργαζόμενος " C " " περιτύλιγμα υπό όρους , ως εξής :

# ifdef __ cplusplusExtern "C" { # endif

# include " DllPath \\ MyDLLFunctions.h "

# ifdef __ cplusplus } //end παρένθεση για " extern C " οδηγία # endif
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα