Я использую интерфейс ITypeInfo
для получения информации о COM-объектах и их членах (для создания своего рода API отображения). Чтение типов и элементов (и их параметров) отлично работает, но я не знаю, как получить доступ к значению по умолчанию параметра. Это то, что у меня есть ...Как получить значение по умолчанию от PARAMDESC
...
PARAMDESC paramDesc = elemDesc.desc.paramdesc;
object defaultValue = null;
PARAMFLAG paramFlags = paramDesc.wParamFlags;
bool hasDefaultValue = (paramFlags & PARAMFLAG.PARAMFLAG_FHASDEFAULT) == PARAMFLAG.PARAMFLAG_FHASDEFAULT;
if (hasDefaultValue && paramDesc.lpVarValue != IntPtr.Zero)
{
defaultValue = null; // TODO: get value from paramDesc.lpVarValue
}
...
Я проверяю wParamFlags
поле; если параметр имеет значение по умолчанию, а поле lpVarValue
имеет действительный указатель, я хотел бы прочитать это значение. Я предположил, что lpVarValue
указывает на родной COM вариант, поэтому я попытался получить объект, представляющий значение по умолчанию с помощью Marshal.GetObjectForNativeVariant
, но это не удается с фатальной ошибкой ...
Это решение работает. Единственное, что я изменил, это смещение указателя ... isn't ulong 8-байтовое целое? – Matze
Нет, его 4 байта. Оба в 32-битном и 64-битном режимах. –
Но если я использую 4 байта, он продолжает сбой ... – Matze