天天看點

VC的自動化向導的BUG

VC6

  • BUG: ClassWizard Omits Methods with BYTE or BYTE* As Parameters (http://support.microsoft.com/kb/q241862/)
  • BUG: VTS_UI1 and VTS_PUI1 are Defined Incorrectly in AfxDisp.h (http://support.microsoft.com/kb/242588/)
  • FIX: Method with BOOL* Parameter Type Overwriting Memory in Visual Basic (http://support.microsoft.com/kb/199315/)

VC.Net 2003:

VC6的向導産生的封裝類對VARIANT類型的屬性的處理是傳位址

void CAxCtrlAV::SetFoo(const VARIANT& propVal)

{

    SetProperty(0x1, VT_VARIANT, &propVal);

}

VC7的向導産生的封裝類對VARIANT類型的屬性的處理是傳值

void CAxCtrlAV::SetFoo(VARIANT propVal)

{

    SetProperty(0x1, VT_VARIANT, propVal);

}

因為VC7的va_list/va_start的 行為改為替換棧層次而不是實際上儲存參數的位址,對屬性的通路最終會在COleDispatchDriver::InvokeHelperV中導緻程式崩潰。解決該問題的方法是手工将VC7的類向導産生的封裝類的定義和實作更改為VC6風格的,或者不使用VARIANT做為屬性的類型。

繼續閱讀