Προς το περιεχόμενο

exporting no-strong type σε dll (C++)


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Χρονια πολλα.

Εχω ενα dll το οποιο εχει την υλοποιηση καποιων interfaces. Ολα καλα εκτος απο ενα θεματακι, τα interfaces εχουν no-strong types (vectors,strings,smartpointers etc..) με αποτελεσμα, αν κανω compile ενα κομματι απο το project μπορει να φαω πακετο για ευνοητους λογους :P . Σκευτηκα να φτιαξω μεσα στο project wrappers αυτων των τυπων και στη συνεχεια να τους βγαλω ως interface. Πχ mywrapperString -> IString και να τα χρησιμοποιησω σε ολο το project. IString αντι του std::wstring. Μηπως υπαρχει κατι πιο απολο, γιατι με το δικο μου σκεπτικο θα εχω 123123123123123 pointer :blink:

 

Να και ενα cd

post-140752-0-28318100-1293376688_thumb.jpg

Δημοσ.

Το std::vector<int> για παράδειγμα είναι ένας συγκεκριμένος τύπος - γιατί δε μπορείς να τον χρησιμοποιήσεις;

Δημοσ.

Λογικά πρέπει να trws πολλά warning, μπορείς να τα αγνοήσεις αν θέλεις, η καλύτερα μην φτιάχνεις dlls αλλα static libs γιατί με dlls έχεις αλλα προβλήματα όπως για παράδειγμα δη πρέπει να πετάς exceptions από dll "προσταμεσα". Αλλιώς για το κάθε τι πρέπει να φτιάξεις γκάι κάθε τι που έχει template ένα interface που δη είναι και τόσο ωραίο. Δες τα παραδείγματα από libs της apache. Τι φτιάχνεις αν επιτρέπεται?

Δημοσ.

Το std::vector<int> ειναι ενας τυπος, το θεμα ειναι οτι ολη η stl ειναι inline, αρα αν αλλαξω compiler, και θελω να κανω καποιο upgrade τοτε δεν θα κουμπωνει το std::vector. Τεσπα αλλαξα τα std::wstring με nul terminal string και το vector σε ενα interface (αντιγραφη απο την .net :rolleyes: )

>template < class T >
class IEnumerator
{
public:
virtual bool Next() = 0;
virtual void Reset() = 0;
virtual T Current() = 0;
};

εφτιαξα και μια for_each και ειμαι gg :rolleyes:

>template < class T , class F >
__inline void for_each(IEnumerator<T>* enumerator,F _ld) 
{
while(enumerator->Next())
	_ld(enumerator->Current());
enumerator->Reset();
}

 

btw φτιαχνω μια ταινιοθηκη :D

Δημοσ.

Τι σχέση έχει το inlining; Όσο κρατάς ABI compatibility και name mangling, η βιβλιοθήκη σου θα δουλεύει σωστά.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...