Exponer contenedores STL sobre límites de DLL no es una buena idea, y generalmente no es posible (ver this answer for why y this one sobre exponer una std :: list a dll límite). Necesito poder pasar datos entre DLL y EXE compilados con compiladores diferentes (VC08/VC10 +); this Q solo trata de que todo sea lo mismo.Exponer std :: vector en un límite dll: práctica recomendada para la independencia del compilador
¿Cuál es la mejor manera de exponerlos? Los vectores son un poco diferentes de las listas en cuanto a que se garantiza que la memoria es contigua, así que si solo necesito un vector de dobles, ¿puedo simplemente proporcionar punteros de inicio y final al bloque para la función en el dll? La dll también necesita devolver alguna estructura como una matriz de vectores.
Me preguntaba sobre una estructura que contiene punteros comienzan y finales:
template <typename T>
struct vecWrapper<T> {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper<double> numbers);
Sería eso sensato? Presumiblemente, cualquier cosa que se devuelva de la función necesitaría un destructor (en el lado dll) que destruye las cosas a las que apunta.
Relacionados, lea: http://stackoverflow.com/questions/5661738/common-practice-in-dealing-with-warning-c4251-class-needs-to-have-dll-inter/5664491#5664491 –
Saludos @JohnDibling, esa es una buena explicación de por qué no exponer contenedores STL directamente. De ahí la cuestión de cómo exponer los datos en sí. Espero que el requisito contiguo lo haga posible sin más copias. –
¿Por qué no pasar simplemente una matriz simple? – Rook