PInvoke ошибка при маршалинге структуры со строкой в ней
У меня есть структура C ++
struct UnmanagedStruct
{
char* s;
// Other members
};
и структура C #
struct ManagedStruct {
[MarshalAs(UnmanagedType.LPStr)]
string s;
// Other members
}
библиотека C ++ разоблачает
extern "C" UnmanagedStruct __declspec(dllexport) foo( char* input );
И это импортируется как
[DllImport("SomeDLL.dll", CharSet = CharSet.Ansi)]
static extern ManagedStruct foo( string input );
Однако когда я вызываю эту функцию, я получаю
MarshalDirectiveException не было обработано
Подпись типа метода не совместима с PInvoke.
Дело в том, что этот вызов функции работает, если я удаляю char * s и строку s из структур.