Передача записываемого массива StringBuilder в C ++ из C #

У меня есть некоторые из неуправляемых C ++ динамических библиотек и C # GUI приложений, использующих его. Мне нужно передать массив строк с известным размером в библиотеку C ++, которая заполняет его. Также есть максимальное значение длины строки. Я пытаюсь передать массивStringBuilder с самим подходящим размером и подходящей емкостью внутренних элементов (массив буферов).

// C++ library part    
#define MAX_STRING_LENGTH 200
const wchar_t* stringToPopulate = L"Hello, World";

MYDLL_API uint8_t __stdcall getSomeStrings(wchar_t** strings, uint64_t count) {
    for(auto i =0; i < count; ++i){
        // trivial string population
        wcsncpy(*(providers + i), stringToPopulate,
                min(wcslen(stringToPopulate), MAX_STRING_LENGTH ));     
    }
    return 0;
}


// C# application part
[DllImport("myDllName.dll", CallingConvention = CallingConvention.StdCall)]
static extern Byte getSomeStrings(
    [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] StringBuilder[] strings,
    UInt64 size
);

// calling
// create suitable string array
StringBuilder[] stringArrayToPass= new StringBuilder[desirableStringCount];         
for(ulong i =0; i < desirableStringCount; ++i) {
    stringArrayToPass[i] = new StringBuilder(maxStringLength);
}

res = getSomeStrings(stringArrayToPass, desirableStringCount); // exception

у меня естьSystem.AccessViolationException&nbsp;исключение при вызове API библиотеки. Что может быть причиной такой проблемы?