Таким образом, OutBuff - это в основном массив указателей, поэтому вам нужно создать массив IntPtr, элементы которого являются допустимыми указателями, то есть значения IntPtr, указывающие на допустимую память. Как ниже:

я есть функция C ++ в файле DLL (он компилируется с опцией Multi-Byte Character Set):

_declspec(dllexport) void TestArray(char** OutBuff,int Count,int MaxLength)
{
    for(int i=0;i<Count;i++)
    {
        char buff[25];
        _itoa(i,buff,10);

        strncpy(OutBuff[i],buff,MaxLength);
    }
}

Я предполагаю, что прототип C # должен быть следующим:

    [DllImport("StringsScetch.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
    private static extern void TestArray([MarshalAs(UnmanagedType.LPArray)] IntPtr[] OutBuff, int Count, int MaxLength);

Но я должен подготовить объекты IntPtr для получения строк из неуправляемого кода?

Ответы на вопрос(1)

Ваш ответ на вопрос