У меня есть две структуры C ++, которые я должен отправлять в качестве параметров при вызове метода DLL из C #.
Например, давайте определим их как:
struct A
{
int data;
}
struct B
{
int MoreData;
A * SomeData;
}
Метод, который янеобходимость вызова из C # имеет следующую подпись:
int operation (B * data);
(Обратите внимание, что у меня нет контроля ни над этими структурами C ++, ни над методами.)
В C # я определяю эти структуры какклассы:
[StructLayout(LayoutKind.Sequential)]
class A
{
public int data;
}
[StructLayout(LayoutKind.Sequential)]
class B
{
public int MoreData;
[MarshalAs(UnmanagedType.Struct)]
public A SomeData;
}
Я создал «отладочную dll» для вызова из C #, чтобы гарантировать, что все данные получены правильно в методах C ++.Пока правильно отправляются только те данные, которые находятся перед указателем вложенной структуры.
Когда я пытаюсь прочитать данные из вложенной структуры (B-> A-> data), я получаю ошибку нарушения чтения (AccessViolationException).
Как мне упорядочить вложенную структуру, чтобы ясможет прочитать его в методе C ++?