Related URL http://community.9cbs.net/expert/topic/3160/3160520.xml?temp=.199032 test engineering
Class CNewfree: Public inewfree, public ccomobjectroot, Public CCOMCOCLASS
{
PUBLIC:
CNEWFREE ()}
Begin_COM_MAP (CNewfree)
COM_ITERFACE_ENTRY (INEWFREE)
END_COM_MAP ()
Declare_not_AGGREGATABLE (CNEWFree)
DECLARE_REGISTRY_RESOURCEID (iDR_Newfree)
// inewfreepublic: stdmethod (%) (/ * [in] * / byte ** pbmem);}; ---------------------------------------------------------------------------------------------------------------------- ----- # include
#include
STDMETHODIMP CNEWFREE :: getMem (byte ** pbmem) {cstring * pstr = new cstring ("111111111111); * pbmem = (byte *) PSTR;
Return S_ok;} ===============================================================================================================================================================================================================================================================】 , HWND / * hWndCtl * /, BOOL & / * bHandled * /) {INewFree * pINewFree = NULL; CoCreateInstance (__ uuidof (NewFree), NULL, CLSCTX_INPROC_SERVER, __uuidof (INewFree), (void **) & pINewFree);
BYTE * PBDATA = NULL; PINEWFREE-> GetMem (& PBDATA); CString * pstr = null; pstr = (cstring *) pbdata; delete pstr; // One run here is wrong! ! ! Why ??? Return 0;}
-------------------------------------------------- ---------------------
Error analysis, because WTL's CSTRING is not Virtual, so heap is invalid
-------------------------------------------------- ---------------------------
solution:
Class cmystring {
PUBLIC:
CMYSTRING ()
{
m_str = "";
}
Virtual ~ cmyString ()
{
}
CSTRING M_STR;
}