2012-01-06 21 views
2

OleとActiveXツールを使用していた古いプロジェクトを継承しました。コンパイルすると、PROP_ENTRYマクロで廃止予定の警告が表示され、PROP_ENTRY_TYPEで置き換えられますが、4番目のパラメータが使用されます。私は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

三番目のパラメータとして置かれる必要があるvarientのタイプを使用すると、たとえば、PROP_ENTRY_TYPEため

を使用しているプロパティによって返される値の種類(「有効」である、DISPID_ENABLED 、CLSID_NULL、VT_BOOL)

ここで、送信する必要のあるデータ型がわからない場合は、VT_EMPTYを渡すことができます。その理由は、PROP_ENTRYマクロとPROP_ENTRY_TYPEマクロの両方が内部的に同じAPIを呼び出すため、変数型をパラメータの1つとして取ります。

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 

ここから、必要なものを選択します。

関連する問題