Перейти к содержанию
Авторизация  
Alexandr

Гуру C# ОтЗОВИТЕСЬ

Рекомендуемые сообщения

Здравствуйте!

Столкнулся вот с какой проблемой.

У меня есть переменная типа INTPTR. в ней лежит адрес, по которому можно получить массив некоторой структуры STRUCT_AN.

 

Есть переменная

 

STRUCT_AN[] st1;

 

И вот тут возникает вопрос: Как в управляемом коде C# заполучит содержимое этого массива, используя указатель INTPTR.

 

помогите добрым словом!!!!!

Заранее благодарствую!


Кто подскажет, кто пойсет, от чего меня трясет?

Поделиться сообщением


Ссылка на сообщение

С помощью примерно такой вот функции можно получить одну структуру по известному адресу.

 

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);

}

}


Маша — это, конечно, Маша, но два раза — это два раза.

Поделиться сообщением


Ссылка на сообщение

Спасибо! Даже не сообразил бы так.

В итоге сделал немного по-другому.

 

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; //заполняем массив
}

 

В итоге получаю готовый массив структур с инфой о ключах шифрования. (СКЗИ ВЕРБА)


Кто подскажет, кто пойсет, от чего меня трясет?

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×