Metadata Unmanaged Api

Тема в разделе "MS Visual C++", создана пользователем poisent, 23 май 2007.

Статус темы:
Закрыта.
  1. poisent

    poisent Гость

    возникла проблема с определение типа поля:
    Выбираем класс из сборки, находим поля класса.
    Метод
    HRESULT GetFieldProps (
    mdFieldDef mb,
    mdTypeDef *pClass,
    LPWSTR szField,
    ULONG cchField,
    ULONG *pchField,
    DWORD *pdwAttr,
    PCCOR_SIGNATURE *ppvSigBlob,
    ULONG *pcbSigBlob,
    DWORD *pdwCPlusTypeFlag, - необходимое значение.
    UVCP_CONSTANT *ppValue,
    ULONG *pcchValue
    );
    Возвращает всю информацию о поле, кроме *pdwCPlusTypeFlag.
    По какимто причинам *pdwCPlusTypeFlag всегда возвращает = 1 . т.е => невозможно определить тип поля;
    Кто-нибудь знает с чем это связано, и как это исправить?
     
  2. poisent

    poisent Гость

    Для: sax_ol
    Определяем
    class MyClass1
    {
    public char x;
    }
    char = ELEMENT_TYPE_CHAR ,
    Но pdwCPlusTypeFlag всеравно будет равен 1, независимо от того, x - char,int,bool.
    Вот в чем проблема
     
  3. poisent

    poisent Гость

    Для: sax_ol
    class MyClass1
    {
    public char x='A';
    }
    char = ELEMENT_TYPE_CHAR ,
    Но pdwCPlusTypeFlag всеравно будет равен 1, независимо от того, x - char,int,bool
    так пойдёт?
    А если нет, тогда что значит default value?
     
  4. poisent

    poisent Гость

    Для: sax_ol
    Тогда можешь подсказать, как мне получить тип поля?
     
  5. poisent

    poisent Гость

    Для: sax_ol
    Ок, посмотрю, но пока не понял как его извлечь =(
     
  6. poisent

    poisent Гость

    Для: sax_ol
    Вопрос решил, действительно в стуктуре PCCOR_SIGNATURE в определённом байте хранится информация о типе объекта, но это было ппц =). Долго искал.
    Что делаю? В C# есть такая способность как Reflection, с помощью отражения можно много чего делать, а мне надо было сделать прогу которая открывает сборку, и вытаскивает из неё все Классы, Интерфейсы, поля, методы, свойства. С C# проблем нету, там все легко.
    А человеку понадобилась таже программа ,но написаная на UnManaged коде и C++, при помощи Metadata Unmanaged API .
    Интересная задачка была, спс за подсказку +)
     
Статус темы:
Закрыта.

Поделиться этой страницей