Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: простой вопрос по структурам
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
sergey sva
Вот структура :
Код
typedef struct _DEVICE_EXTENSION
{
    PDEVICE_OBJECT  pDevice;

    UNICODE_STRING  ustrDeviceName;     // внутреннее имя устройства
    UNICODE_STRING  ustrSymLinkName; // внешнее имя (символьная ссылка)

    UCHAR deviceOutBuffer[MAX_BUFFER_SIZE], // для вывода в устройство
          deviceInBuffer [MAX_BUFFER_SIZE]; // для получения из устройства

    ULONG  xferCount, // текущий передаваемый байт
           xferRest;  // остаток непереданных байт (индикатор завершенности)
    //=============================================
    PUCHAR portBase;  // адрес порта ввода/вывода
    ULONG Irq;        // Irq в терминах шины ISA для параллельного порта
    //=============================================
    PKINTERRUPT pIntObj;            // interrupt object
    KDPC        DpcForIsr_Object;   // DPC object

} DEVICE_EXTENSION, *PDEVICE_EXTENSION;


вот код где она работает:
Код
    NTSTATUS status;
    PDEVICE_OBJECT pDevObj;
    PDEVICE_EXTENSION pDevExt;


а вот как эта строчка работает не пойму:
Код
    
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;

pDevExt указатель на PDEVICE_EXTENSION, pDevExt содержит адрес структуры PDEVICE_EXTENSION
pDevObj->DeviceExtension содержимое элемента структуры pDevObj, после выполнения этой строчке что
будет pDevExt = ?
SamHaris
Цитата(sergey sva @ Oct 18 2008, 18:17) *
а вот как эта строчка работает не пойму:
Код
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;

pDevExt указатель на PDEVICE_EXTENSION, pDevExt содержит адрес структуры PDEVICE_EXTENSION
pDevObj->DeviceExtension содержимое элемента структуры pDevObj, после выполнения этой строчке что
будет pDevExt = ?

Это преобразование типа переменной pDevObj->DeviceExtension в переменную pDevExt, которая имеет тип PDEVICE_EXTENSION, соответственно результат будет зависеть от того, что из себя представляет переменная pDevObj->DeviceExtension.

Если pDevObj->DeviceExtension указатель на DEVICE_EXTENSION, то он (указатель) скопируется в pDevExt.
Тогда надо так писать, чтоб не вводить никого в заблеждения:
Код
pDevExt = pDevObj->DeviceExtension;


Если pDevObj->DeviceExtension указатель на что-то другое, то указатель бедет перобразован в PDEVICE_EXTENSION. А контролировать указатли должен сам чел.

Если pDevObj->DeviceExtension структура DEVICE_EXTENSION, то в pDevExt запишется указатель pDevObj->DeviceExtension.pDevice; И скорее это неправильно, так как опять же вводит в заблуждения.
Если надо все же записать указатель на эту структуру, то надо так писать:
Код
pDevExt = &pDevObj->DeviceExtension;


Ну а если pDevObj->DeviceExtension класс, то надо смотреть его операторы.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.