L'esposizione di contenitori STL oltre i limiti DLL non è una buona idea e generalmente non è possibile (vedere this answer for why e this one sull'esposizione di uno std :: list su una dll confine). Devo essere in grado di passare i dati tra DLL ed EXE compilati con diversi (VC08/VC10 +) compilatori; this Q si occupa solo di tutto uguale.Esposizione di std :: vector su un limite di dll - best practice per indipendenza del compilatore
Qual è il modo migliore per esporli? I vettori sono un po 'diversi dagli elenchi in quanto la memoria è garantita come contigua, quindi se ho solo bisogno di un vettore const di doppi, posso semplicemente fornire puntatori di inizio e fine al blocco alla funzione nella dll? La DLL deve anche restituire alcune strutture come una matrice di vettori.
ho domandato circa una struct contenente iniziano e puntatori finali:
template <typename T>
struct vecWrapper<T> {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper<double> numbers);
Vorrei che sia ragionevole? Presumibilmente, qualsiasi cosa sia restituito dalla funzione avrebbe bisogno di un distruttore (sul lato dll) che distrugge le cose a cui punta.
Correlati, leggere: http://stackoverflow.com/questions/5661738/common-practice-in-dealing-with-warning-c4251-class-needs-to-have-dll-inter/5664491#5664491 –
Cheers @JohnDibling, questa è una buona spiegazione del perché non esporre direttamente i contenitori STL. Di qui la domanda su come esporre i dati stessi. Spero che il requisito contiguo lo renda possibile senza ulteriore copia. –
Perché non passare semplicemente un semplice vecchio array? – Rook