Metadata Unmanaged Api

  • Автор темы poisent
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

poisent

#1
возникла проблема с определение типа поля:
Выбираем класс из сборки, находим поля класса.
Метод
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 . т.е => невозможно определить тип поля;
Кто-нибудь знает с чем это связано, и как это исправить?
 
P

poisent

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

poisent

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

poisent

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

poisent

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

poisent

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