PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++/COM: Invalid Address specified to RtlSizeHeap


Elemental
2006-04-24, 12:48:03
Hallo zusammen,
ich verzweifle gerade wieder mal an einem C++ Problem.

Beim Aufruf folgender Methode

STDMETHODIMP CCoLineProxy::SetProductionSchedule(BSTR bstrProductionScheduleFullPath)
{
TraceLog(L"CCoLineProxy::SetProductionSchedule()",
L"Line = ", OLE2W(GetLineFolderAndName()),
L"ProductionSchedule = ", OLE2W(bstrProductionScheduleFullPath),
true/*bTraceAllways*/);

m_bstrProductionScheduleFullPath = bstrProductionScheduleFullPath;

return S_OK;
}

(m_bstrProductionScheduleFullPath ist vom Typ CComBSTR)

bekomme ich eine MessageBox "User breakpoint called from code at 0x7c911230" und folgenden Output im DebugWindow

HEAP[LCSVR.exe]: Invalid Address specified to RtlSizeHeap( 00140000, 00C63030 )

Der Fehler tritt auf, wenn die Methode verlassen wird.


Aber der Code läuft schon seit Monaten problemlos; eigentlich wurde gerade an ganz anderer Stelle gebaut.

Was ich bis jetzt im Internet gelesen habe, scheint das durch memory deallocation der BSTR verursacht zu werden.
Aber der Code wurde doch nicht verändert!
Hatte jemand hier schomal dieses Problem?


mfG
Elemental

Elemental
2006-04-25, 09:33:36
Argh, wie ich die ganzen C++ strings hasse, insbesondere die BSTR :mad:


STDMETHODIMP CCoStationProxy::get_RightConveyorRecipeFullPath(/*[out, retval]*/ BSTR *pRecipeFullPath)
{
//first initialize out params
//return empty string if we didn't get a recipe
*pRecipeFullPath = _T("");


//...
}


Sowas sollte man natürlich nicht tun! Und der blöde Compiler frisst das sogar :P