Преобразование из PROP_ENTRY в PROP_ENTRY_TYPE - PullRequest
2 голосов
/ 06 января 2012

Я унаследовал старый проект, в котором использовались инструменты Ole и ActiveX.Компиляция выдает предупреждение об устаревании макроса PROP_ENTRY, и они заменяются на PROP_ENTRY_TYPE, но для этого требуется 4-й параметр.Я нашел список типов, таких как VT_BSTR, VT_UNIT, VT_UNKNOWN и т. Д., Но мне неясно, как определить, какими должны быть типы.Поскольку старый макрос не требовал типа, был ли тип по умолчанию в старом способе выполнения вещей, который я мог использовать?В противном случае у кого-нибудь есть предложения относительно того, какие типы должны быть для любого из этих предметов?Я пытался использовать VT_BSTR для всего, так как большинство значений могут быть (?) Строками, но это приводит к ошибкам в некоторых вещах ActiveX;также попробовал VT_UNKNOWN.Предложения приветствуются.Вещи действительно работают (с некоторыми проблемами) со старым кодом, но было бы неплохо иметь возможность продвинуть нашу кодовую базу вперед.Спасибо, Кен

BEGIN_PROPERTY_MAP(CCiButton)
#if 1
        // old style
    PROP_ENTRY("Caption", DISPID_CAPTION, CLSID_NULL)
    PROP_ENTRY("Back Color", DISPID_BACKCOLOR, CLSID_StockColorPage)
    PROP_ENTRY("Fill Color", DISPID_FILLCOLOR, CLSID_StockColorPage)
    PROP_ENTRY("Font", DISPID_FONT, CLSID_StockFontPage)
    PROP_ENTRY("Picture", DISPID_PICTURE, CLSID_StockPicturePage)
    PROP_ENTRY("Button Style", 1, CLSID_CiButtonProp)
    PROP_ENTRY("Text Color", 2, CLSID_StockColorPage)
    PROP_ENTRY("Text Shadow Color", 3, CLSID_StockColorPage)
    PROP_ENTRY("Tool Tip Text", 4, CLSID_CiButtonProp)
    PROP_ENTRY("Disabled Picture", 5, CLSID_StockPicturePage)
    PROP_ENTRY("Enabled", DISPID_ENABLED, CLSID_NULL)
#else
        // new style, fails.
    PROP_ENTRY_TYPE("Caption", DISPID_CAPTION, CLSID_NULL, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Back Color", DISPID_BACKCOLOR, CLSID_StockColorPage, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Fill Color", DISPID_FILLCOLOR, CLSID_StockColorPage, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Font", DISPID_FONT, CLSID_StockFontPage, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Picture", DISPID_PICTURE, CLSID_StockPicturePage, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Button Style", 1, CLSID_CiButtonProp, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Text Color", 2, CLSID_StockColorPage, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Text Shadow Color", 3, CLSID_StockColorPage, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Tool Tip Text", 4, CLSID_CiButtonProp, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Disabled Picture", 5, CLSID_StockPicturePage, VT_UNKNOWN)
    PROP_ENTRY_TYPE("Enabled", DISPID_ENABLED, CLSID_NULL, VT_UNKNOWN)
#endif
END_PROPERTY_MAP()

Ответы [ 2 ]

1 голос
/ 21 июня 2013

Тип переменной, который необходимо указать в качестве третьего параметра, представляет собой тип значения, возвращаемого используемым свойством

, например PROP_ENTRY_TYPE («Включено», DISPID_ENABLED, CLSID_NULL, VT_BOOL)

Теперь, если вы не уверены, какой тип данных следует отправлять, вы можете передать VT_EMPTY.Причина этого заключается в том, что оба макроса PROP_ENTRY и PROP_ENTRY_TYPE внутренне вызывают один и тот же API, который принимает тип переменной в качестве одного из параметров.

В случае PROP_ENTRY_TYPE переданный тип переменной - это тип, переданный в макросе.

В случае PROP_ENTRY переданный тип переменной - VT_EMPTY.Таким образом, вы можете передать VT_EMPTY непосредственно в PROP_ENTRY_TYPE, чтобы избежать этой проблемы.

, например, PROP_ENTRY_TYPE («Включено», DISPID_ENABLED, CLSID_NULL, VT_EMPTY)

С уважением, Rishabh

0 голосов
/ 21 июня 2013

VT_UNKNOWN означает тип варианта, который содержит IUnknown* указатель интерфейса, который не является вашим сценарием (свойства шрифта и изображения могут иметь указатели интерфейса там, но не другие).

В файлах Windows SDK вы найдете тип VT_ константное сопоставление, например OAIdl.h:

/* VARIANT STRUCTURE
 *
 *  VARTYPE vt;
 *  WORD wReserved1;
 *  WORD wReserved2;
 *  WORD wReserved3;
 *  union {
 *    LONGLONG       VT_I8
 *    LONG           VT_I4
 *    BYTE           VT_UI1
 *    SHORT          VT_I2
 *    FLOAT          VT_R4
 *    DOUBLE         VT_R8
 *    VARIANT_BOOL   VT_BOOL
 *    SCODE          VT_ERROR
 *    CY             VT_CY
 *    DATE           VT_DATE
 *    BSTR           VT_BSTR
 *    IUnknown *     VT_UNKNOWN
 *    IDispatch *    VT_DISPATCH
 *    SAFEARRAY *    VT_ARRAY

Здесь вы сможете выбрать те, которые вам нужны.

...