2012-01-06 63 views
2

我已经继承了一个使用Ole和ActiveX工具的旧项目。编译在PROP_ENTRY宏上提供弃用警告,并用PROP_ENTRY_TYPE替换,但需要第四个参数。我发现了一个类型列表,比如VT_BSTR,VT_UNIT,VT_UNKNOWN等等,但是我不清楚该如何确定类型。既然旧的宏不需要这种类型,那么我是否可以使用旧的方式来执行默认的类型?否则,任何人都会对这些物品的类型应该有什么建议?我试着用VT_BSTR来处理所有事情,因为大多数值都可以是(?)字符串,但是在某些ActiveX工具中失败了。还尝试过VT_UNKNOWN。建议感激。用旧代码运行(有一些问题),但能够向前移动我们的代码库会很好。 谢谢, 肯从PROP_ENTRY转换到PROP_ENTRY_TYPE

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() 

回答

1

需要被置为第三个参数的变体光盘类型是您使用

例如PROP_ENTRY_TYPE(“已启用”由属性返回值类型,DISPID_ENABLED ,CLSID_NULL,VT_BOOL)

现在,如果您不确定应该发送的数据类型是什么,那么您可以传递VT_EMPTY。原因在于宏PROP_ENTRY和PROP_ENTRY_TYPE在内部调用了将变量类型作为参数之一的相同API。

对于PROP_ENTRY_TYPE,传递的变量类型是在宏中传递的变量类型。

对于PROP_ENTRY,传递的变量类型是VT_EMPTY。 因此,您可以直接在PROP_ENTRY_TYPE中传递VT_EMPTY以避免此问题。

例如PROP_ENTRY_TYPE( “启用”,DISPID_ENABLED,CLSID_NULL,VT_EMPTY)

问候, RISHABH

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 

这是你将从哪里选择你需要的。