teo64x Δημοσ. 20 Ιουνίου 2009 Δημοσ. 20 Ιουνίου 2009 Καλησπέρα. Έχω ένα αρχείο DLL με τον παρακάτω κώδικα. >#ifndef _DLL_H_ #define _DLL_H_ #if BUILDING_DLL # define DLLIMPORT __declspec (dllexport) #else /* Not BUILDING_DLL */ # define DLLIMPORT __declspec (dllimport) #endif /* Not BUILDING_DLL */ class DLLIMPORT DllClass { public: DllClass(); virtual ~DllClass(void); private: }; #endif /* _DLL_H_ */ >/* Replace "dll.h" with the name of your header */ #include "dll.h" #include <windows.h> DllClass::DllClass() { } DllClass::~DllClass () { } BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; } int __declspec(dllexport) __stdcall something(int i) { return 2*i; } Ο παραπάνω σκελετός είναι ο προεπιλεγμένος του Dev-C++ και για αρχή πρόσθεσα μόνο τη συνάρτηση something στο τέλος. Μετά το compile, είδα ότι δε μπορούσα να καλέσω αυτή τη συνάρτηση και τελικά, χρησιμοποιώντας το DLL Export Viewer, είδα ότι μέσα στο DLL η συνάρτηση έχει το όνομα _Z9somethingi. Αν και δεν είναι ιδιαίτερα κρίσιμο το πρόβλημα (αφού η συνάρτηση καλείται κανονικά με το "νέο" της όνομα), μου δημιουργήθηκε η απορία και είπα να ρωτήσω. Γιατί συμβαίνει αυτό; Παρακάμπτεται;
teo64x Δημοσ. 20 Ιουνίου 2009 Μέλος Δημοσ. 20 Ιουνίου 2009 Όντως, λύθηκε. Σ' ευχαριστώ πάρα πολύ. Πληροφοριακά, γιατί μπήκαν αυτοί οι χαρακτήρες στο όνομα της συνάρτησης και τι ακριβώς κάνει το extern "C" μπροστά από τη δήλωση της συνάρτησης που να το διορθώνει αυτό; Ρωτάω επειδή τα ονόματα φαίνεται να ήταν ήδη exported (υποθέτω) αφού φαίνονταν στον viewer, γιατί χρειαζόταν αυτό; EDIT: Άκυρη η ερώτηση. Λίγη ώρα αφού την έθεσα, βρήκα την απάντηση στο παρακάτω λινκ: http://www.devx.com/tips/Tip/12527
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.