Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с событиями COM, преобразовать массив байт в структуру 
V
    Опции темы
adonin
Дата 25.8.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

Репутация: нет
Всего: 5



Доброй ночи.

У меня есть задача обработать событие, сгенерированное COM сервером. Следующий код регистрирует обработчик на сервере:
Код

           // Обертка для COM объекта SpRecordClient
            var sprecordClient = new SpRecordClientClass();
            sprecordClient.Connect(0, string.Empty, string.Empty);
            // Регистрация обработчика COM событий 
            var connectionPointContainer = (IConnectionPointContainer)sprecordClient;            
            // Гуид ком класса ISpRecordClientEvents
            var guid = new Guid("601D686C-2D6B-4A70-AF5A-094BC254C7B9");
            connectionPointContainer.FindConnectionPoint(ref guid, out point);

            // Обработчик события
            sprecordEvents = new SpRecordClientEvents();
            int pdwCookie;
            point.Advise(sprecordEvents, out pdwCookie);


код обработчика:
Код

public class SpRecordClientEvents : ISpRecordClientEvents
    {
        #region ISpRecordClientEvents Members
        public void OnMessage(object Msg)
        {
           // Мой код
        }
        #endregion
    }


В функции OnMessage() параметр Msg приходит ввиде массива byte. 

Cобственно вопрос: Как мне десериализовать этот массив в структуру? (есть описание структуры на C++)
Всем спасибо.
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
adonin
Дата 26.8.2010, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

Репутация: нет
Всего: 5



Отвечаю сам себе smile  Источник
Используем следующий метод:
Код

public static object RawDeserialize(byte[] rawData, int position, Type anyType)
{
            int rawsize = Marshal.SizeOf(anyType);
            if (rawsize > rawData.Length)
                return null;
            IntPtr buffer = Marshal.AllocHGlobal(rawsize);
            Marshal.Copy(rawData, position, buffer, rawsize);
            object retobj = Marshal.PtrToStructure(buffer, anyType);
            Marshal.FreeHGlobal(buffer);
            return retobj;
}

метод OnMessage принимает следующий вид:
Код

public void OnMessage(object Msg)
        {
            MSGHEADER f;
            byte[] byteArray = (byte[])Msg;
            // преобразуем массив в структуру
            f = (MSGHEADER)RawDeserialize(byteArray, 0, typeof(MSGHEADER));
        }


Ларс, если читаешь, респект тебеsmile
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0598 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.