У меня проблема, и я буду очень признателен, если вы поможете мне.CString, использующийся для статического метода
У меня есть MDI, и в классе CDocument, у меня есть:-структуру
CMyDoc.h
class CMyDoc : public CDocument
{
...
struct SRecord
{
SRecord(){}
virtual ~SRecord(){}
CString sName;
CString sState;
CString sDateu;
CString sDatec;
};
CTypedPtrArray<CPtrArray, SRecord*> m_arrRecord;
и где-то я загрузить эту структуру с данными:
SRecord* pItem = new SRecord;
pItem->sName = saItem.GetAt(ML_ASSETNAME);
pItem->sState = saItem.GetAt(ML_STATE);
pItem->sDateu = saItem.GetAt(ML_DATEU;
pItem->sDatec = saItem.GetAt(ML_DATEC);
m_arrRecord.Add(pItem);
ОК , Я пытаюсь сортировать данные:
void CMyDoc::SortData(int nColumn, BOOL bAscending)
{
switch(nColumn)
{
case 9:
if(bAscending)qsort((void*)m_arrRecord.GetData(), m_arrRecord.GetSize(), sizeof(SRecord), CompareDateUAscending);
else qsort((void*)m_arrRecord.GetData(), m_arrRecord.GetSize(), sizeof(SRecord), CompareDateUDescending);
break;
...
}
но проблема стать, когда данные доступа в статическом методе:
int CMyDoc::CompareDateUDescending(const void* arg1, const void* arg2)
{
SRecord* Record1 = (SRecord*)arg1;
SRecord* Record2 = (SRecord*)arg2;
if(Record1->sDateu.IsEmpty() || Record2->sDateu.IsEmpty()) // <--- crash !
return 0;
COleDateTime dL, dR;
dL.ParseDateTime(Record1->sDateu);
dR.ParseDateTime(Record2->sDateu);
return (dL == dR ? 0 : (dL < dR ? 1 : -1));
}
и аварии принимают меня здесь (atlsimpstr.h):
CStringData* GetData() const throw()
{
return(reinterpret_cast< CStringData* >(m_pszData)-1); // the crash lead me on this line
}
что я делаю неправильно?
Любая помощь будет очень признательна!
Update:
Я попытался это:
int CMyDoc::CompareDateUDescending(const void* arg1, const void* arg2)
{
SRecord* Record1 = *(SRecord**)arg1; // <-- OK
SRecord* Record2 = *(SRecord**)arg2; // <-- Unhandled exception* see note below
if(Record1->sDateu.IsEmpty() || Record2->sDateu.IsEmpty())
return 0;
COleDateTime dL, dR;
dL.ParseDateTime(Record1->sDateu);
dR.ParseDateTime(Record2->sDateu);
return (dL == dR ? 0 : (dL < dR ? 1 : -1));
}
и крах сказал мне:
"Необработанное исключение встречается во время обратного вызова пользователя" странно ...
Вопросы, требующие помощи по отладке, должны содержать [mcve] вместе с сообщением об ошибке.Вы также должны описать, что должен делать код и каким образом он этого не делает. Atm неясно, в чем проблема – user463035818
Хорошо, я пытаюсь уточнить. – flaviu2
Одна проблема: 'sizeof (SRecord)' должен быть 'sizeof (SRecord *)' – franji1