Passar a matriz StringBuilder gravável para C ++ a partir de C #
Eu tenho algumas da biblioteca dinâmica C ++ não gerenciada e do aplicativo C # GUI, usando-a. Eu preciso passar matriz de seqüências de caracteres com tamanho conhecido para a biblioteca C ++, que a preenche. Também há o valor máximo do comprimento da string. Eu estou tentando passar matriz deStringBuilder
com tamanho adequado e capacidade de elementos internos adequada (também conhecida como matriz de buffers).
// 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
eu tenhoSystem.AccessViolationException
exceção na chamada da API da biblioteca. O que pode ser uma razão para esse problema?