Предоставление контейнеров STL через границы DLL не является хорошей идеей и, как правило, невозможно (см. этот ответ, почему и этот об отображении стандартного ::списка поверх dll граница ). Мне нужно иметь возможность передавать данные между DLL и EXE, скомпилированными с помощью разных компиляторов (VC08/VC10+ ); этот вопрос имеет дело только с тем, что все одинаково.
Как лучше всего их разоблачить? Векторы немного отличаются от списков тем, что память гарантированно непрерывна, поэтому, если мне нужен только константный вектор двойных значений, могу ли я просто указать начальный и конечный указатели на блок для функции в dll? DLL также должна возвращать некоторую структуру, например массив векторов.
Меня интересовала структура, содержащая указатели начала и конца :
template
struct vecWrapper {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper numbers);
. Было бы это разумно?Предположительно, что бы ни возвращалось из функции, потребуется деструктор (на стороне dll ), который уничтожает объекты, на которые он указывает.