lista Ответов: 1

Проблема неуправляемых и управляемых структур в C#


I'm receiving in c# a structure pointer from a c++ library callback


c++ structure

the packing is 1 

typedef 
{
int data1[8];
int data2[8];
int data3;
int data3;	
} SomeStruct;


in c# i have this equivalent 

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1), Serializable]
public struct SomeStruct
{
	[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
	public int[] data1
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
        public int [] data2;
        public int data3;
        public int data4;
};


Что я уже пробовал:

var data contains the right IntPtr  

SomeStruct ss = (SomeStruct )Marshal.PtrToStructure(pointer, typeof(SomeStruct));

But im getting garbage, what im doing wrong?, thanks

1 Ответов

Рейтинг:
2

OriginalGriff

Вы пробовали неуправляемый тип?Атрибут LPArray?

[MarshalAs(UnmanagedType.LPArray, SizeConst = 8)]
public int[] data1

В приведенном здесь примере он используется: Маршалинг по умолчанию для массивов[^]- найдите "при импорте массива в стиле C" и посмотрите пример в разделе " управляемая подпись"


lista

я пробовал раньше, и я получаю это " массивы полей должны быть в паре с ByValArray или SafeArray"

Я собираюсь прочитать ссылку, которую вы прислали, большое спасибо