Alexandr 0 Опубликовано 20 июля, 2009 Здравствуйте! Столкнулся вот с какой проблемой. У меня есть переменная типа INTPTR. в ней лежит адрес, по которому можно получить массив некоторой структуры STRUCT_AN. Есть переменная STRUCT_AN[] st1; И вот тут возникает вопрос: Как в управляемом коде C# заполучит содержимое этого массива, используя указатель INTPTR. помогите добрым словом!!!!! Заранее благодарствую! Кто подскажет, кто пойсет, от чего меня трясет? Поделиться сообщением Ссылка на сообщение
Saper 146 Опубликовано 22 июля, 2009 С помощью примерно такой вот функции можно получить одну структуру по известному адресу. unsafe static STRUCT_AN GetStruct(IntPtr wparam) { int length = Marshal.SizeOf(STRUCT_AN); byte[] receivedBytes = new byte[length]; Marshal.Copy(wparam, receivedBytes, 0, length); BinaryFormatter serializer = new BinaryFormatter(); using (MemoryStream inputStream = new MemoryStream(receivedBytes, false)) { return (STRUCT_AN)serializer.Deserialize(inputStream); } } Маша — это, конечно, Маша, но два раза — это два раза. Поделиться сообщением Ссылка на сообщение
Alexandr 0 Опубликовано 27 июля, 2009 Спасибо! Даже не сообразил бы так. В итоге сделал немного по-другому. UInt16 k; // количество ключей STRUCT_AN SprST = new STRUCT_AN(); //Структура информации о ключе STRUCT_AN[] SprList = new STRUCT_AN[k]; //массив структур с номерами ключей IntPtr SprPTR = Marshal.AllocHGlobal(15); //Указатель на первый лемент массива структур GetKeyList("a:\\", serial, out SprPTR, out k, 'E'); //Получаем указатель на массив for (int i=0; i<k; i++) //перебираем все ключи, чтобы заполнитть массив { SprPTR = (IntPtr)((long)SprPTR+i*15); // увеличиваем положение указателя на длину структуры SprST = (STRUCT_AN)Marshal.PtrToStructure(SprPTR, typeof(STRUCT_AN)); //получаем структуру, находящуюся по указателю SprLists[i] = SprST; //заполняем массив } В итоге получаю готовый массив структур с инфой о ключах шифрования. (СКЗИ ВЕРБА) Кто подскажет, кто пойсет, от чего меня трясет? Поделиться сообщением Ссылка на сообщение