Εσωτερικές πληροφορίες υποστήριξης της Microsoft
Σφάλμα #: 101959 (Visual Studio)
Σύνοψη
Όταν δημιουργείτε ένα αρχείο DLL, χρησιμοποιώντας την έκδοση 64-bit, το πρόγραμμα μεταγλώττισης Microsoft Visual C++ και το πρόγραμμα σύνδεσης, ενδέχεται να εμφανιστεί το πρόγραμμα σύνδεσης αριθμός σφάλματος LNK4197 εάν μια συνάρτηση που έχει δηλωθεί για εξαγωγή περισσότερες από μία φορές.
Συμπτώματα
Το πρόγραμμα σύνδεσης εξόδου μπορεί να είναι παρόμοιο με το ακόλουθο:
C:\>link /NOLOGO /def:Sample.def /pdb:Sample.pdb /out:Sample.dll Sample.objSample.obj : warning LNK4197: export 'DllSample' specified multiple times; using first specification Creating library Sample.lib and object Sample.exp
Αιτία
Το πρόγραμμα σύνδεσης αριθμός σφάλματος LNK4197 δημιουργείται όταν μια συνάρτηση έχει δηλωθεί για εξαγωγή περισσότερες από μία φορές. Μια συνάρτηση έχει δηλωθεί για εξαγωγή σε έναν από τους παρακάτω τρόπους:
-
Η συνάρτηση δηλωθεί, χρησιμοποιώντας τη λέξη-κλειδί __declspec(dllexport) στο αρχείο προέλευσης "C":
__declspec(dllexport) int DllSample() { return 42;}
-
Η συνάρτηση δηλωθεί χρησιμοποιώντας ένα καθορισμού λειτουργικής μονάδας (. Αρχείο DEF):
EXPORTS DllSample
Αυτό το πρόγραμμα σύνδεσης σφάλμα παρουσιάζεται πιο συχνά όταν τόσο τη λέξη κλειδί __declspec(dllexport) και ένα. Αρχείο Ανάλυσης χρησιμοποιούνται για να ορίσουν το ίδιο όνομα συνάρτησης σε ένα. Το έργο DLL.
Επίλυση
Για να επιλύσετε αυτήν τη συμπεριφορά, ορίστε εξαγόμενο συναρτήσεις μόνο μία φορά, είτε χρησιμοποιώντας τη λέξη-κλειδί __declspec(dllexport) ή χρησιμοποιώντας ένα. Αρχείο Ανάλυσης. Μην χρησιμοποιήσετε και τις δύο από αυτές τις μεθόδους.
Κατάσταση
Αυτή η συμπεριφορά οφείλεται στη σχεδίαση.
Περισσότερες πληροφορίες
Η δήλωση μιας συνάρτησης για εξαγωγή περισσότερες από μία φορές δεν μπορεί να παράγει το σφάλμα πρόγραμμα σύνδεσης που περιγράφεται στην ενότητα "Συμπτώματα" αυτού του άρθρου σε εκδόσεις 32-bit του Microsoft Windows C++ μεταγλωττιστή και πρόγραμμα σύνδεσης. Ωστόσο, η Microsoft συνιστά να ορίσετε εξαγωγές συνάρτηση μόνο μία φορά σε εκδόσεις 32-bit και 64-bit των Windows C++ μεταγλωττιστή και πρόγραμμα σύνδεσης.