2012-01-06 65 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 

這是你將從哪裏選擇你需要的。