Предоставление std ::вектора через границу dll -передовой опыт для независимости компилятора

Предоставление контейнеров STL через границы DLL не является хорошей идеей и, как правило, невозможно (см. этот ответ, почему и этот об отображении стандартного ::списка поверх dll граница ). Мне нужно иметь возможность передавать данные между DLL и EXE, скомпилированными с помощью разных компиляторов (VC08/VC10+ ); этот вопрос имеет дело только с тем, что все одинаково.

Как лучше всего их разоблачить? Векторы немного отличаются от списков тем, что память гарантированно непрерывна, поэтому, если мне нужен только константный вектор двойных значений, могу ли я просто указать начальный и конечный указатели на блок для функции в dll? DLL также должна возвращать некоторую структуру, например массив векторов.

Меня интересовала структура, содержащая указатели начала и конца :

template 
struct vecWrapper {
    T*  begin;
    T*  end;
}

// in the dll
int func(vecWrapper numbers);

. Было бы это разумно?Предположительно, что бы ни возвращалось из функции, потребуется деструктор (на стороне dll ), который уничтожает объекты, на которые он указывает.

7
задан Community 23 May 2017 в 10:27
поделиться