STL - это библиотека, специфичная для C ++, поэтому вы не можете напрямую передать ее как один объект в C #.
Единственное, что гарантируется в std :: vector, это то, что & v [0] указывает на первый элемент, а все элементы лежат в памяти линейно (другими словами, это похоже на массив C с точки зрения разметки памяти)
Такой маршал, как массив int ... который не должен быть сложным - в сети много примеров.
Добавлена
Предполагается, что вы только передаете данные из C ++ в C #:
C # не может обрабатывать векторный объект C ++, поэтому не пытайтесь передавать его по ссылке: вместо этого ваш код C ++ должен возвращать указатель на массив целых чисел ...
Если вы не собираетесь использовать эту функцию из нескольких потоков, вы можете использовать статическое хранилище:
int *getRects(bool bClear)
{
static vector<int> v; // This variable persists across invocations
if(bClear)
{
v.swap(vector<int>());
}
else
{
v.clear();
// Fill v with data as you wish
}
return v.size() ? &v[0] : NULL;
}
вызовите getRects (true), если возвращаемые данные имеют значительный размер, поэтому вы освобождаете память в v.
Для простоты вместо того, чтобы выдавать размер векторных данных, просто поместите значение часового в конце (как, скажем, -1), чтобы код C # мог определить, где заканчиваются данные.