2015-09-17 19 views
0

我有下面的代碼,我在調用VariantInit方法variant.pvarval,因爲我要存儲varaint在另一個變種叫做pval。因此,在將價值存入pVal->pvarVal之前,我打電話VariantInitpVal->pvarVal。但電話VariantInit(pVal->pvarVal)正在崩潰。如何初始化變種pvarVal

void Function(VARIANT FAR* pVal) 
    { 

     VariantInit(pVal); 
     VariantInit(pVal->pvarVal); 

     pVal->vt = VT_VARIANT | VT_BYREF ; 

     __int64 biNewVal = // Some logic here 
     pVal->pvarVal->vt = VT_CY; 
     pVal->pvarVal->cyVal.int64 = biNewVal; 

    } 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    VARIANT var;  
    Function(&var); 
    return 0; 
} 
+0

你必須做'pVal-> pvarVal'指向嘗試初始化它指向的空間... –

+0

@MM如何使pVal-> pvarVal點在什麼地方? –

+0

寫'pVal-> pvarVal = x;'其中'x'是你爲變體分配的一些內存..但是IDK推薦的方式是這樣做的(這將與VariantClear兼容)。 –

回答

0

,在線幫助

的VariantInit功能通過設置VT成員VT_EMPTY初始化VARIANTARG。

這個初始化函數不初始化pvarVal任何有效的指針變體 所以,在你的代碼有 pVal-> VT = VT_VARIANT | VT_BYREF;

__int64 biNewVal = // Some logic here 
    pVal->pvarval=new VARIANT; 
    pVal->pvarVal->vt = VT_CY; 
    pVal->pvarVal->cyVal.int64 = biNewVal; 

這樣做,將工作

+0

這樣做,'main'在調用'VariantClear'之前一定要做'delete var.pvarVal;' –