我继承了一个使用Ole和ActiveX工具的旧项目。编译在PROP_ENTRY宏上给出了一个弃用警告,它们替换为PROP_ENTRY_TYPE,但它接受第四个参数。我找到了一个类型列表,如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()
答案 0 :(得分:1)
需要作为第三个参数放置的varient类型是您正在使用的属性返回的值的类型
例如PROP_ENTRY_TYPE(“已启用”,DISPID_ENABLED,CLSID_NULL,VT_BOOL)
现在,如果您不确定应该发送的数据类型是什么,那么您可以传递VT_EMPTY。原因是宏PROP_ENTRY和PROP_ENTRY_TYPE在内部调用相同的API,它将varient类型作为参数之一。
在PROP_ENTRY_TYPE的情况下,传递的varient类型是宏中传递的类型。
在PROP_ENTRY的情况下,传递的varient类型是VT_EMPTY。 因此,您可以直接在PROP_ENTRY_TYPE中传递VT_EMPTY以避免此问题。
例如PROP_ENTRY_TYPE(“已启用”,DISPID_ENABLED,CLSID_NULL,VT_EMPTY)
此致 RISHABH
答案 1 :(得分:0)
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
这是您可以从中选择所需的地方。