Exception bei Funktionsaufruf in OnInitDialog
-
Hallo
Ich bekomme immer folgende Exception:
Unhandled exception at 0x004fba16 in BLM-Editor.exe: 0xC0000005: Access violation reading location 0x00d5a2ac.
und lande hier im Code:
void Release() throw() { ATLASSERT( nRefs != 0 ); //genau hier if( _AtlInterlockedDecrement( &nRefs ) <= 0 ) { pStringMgr->Free( this ); } }wenn ich folgenden Code in der OnInitDialog stehen habe. Wenn ich auskommentiere läuft alles.
CStringArray TempNames; Country TempCountry; Ini.GetKeyNames(_T("Countries"), &TempNames); for(int i=0; i<TempNames.GetSize(); ++i) { Ini.GetDataBlock(_T("Countries"), TempNames[i], (LPVOID)&TempCountry ,sizeof(Country));Ich aufgerufene und nicht von mir stammende Funktion der Klasse CIni sieht so aus:
DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWORD dwBufSize, DWORD dwOffset) const { LPTSTR psz = __GetStringDynamic(lpSection, lpKey); DWORD dwLen = _tcslen(psz) / 2; if (dwLen <= dwOffset) { delete [] psz; return 0; } // verify psz, must be all in hex format for (int i = 0; psz[i] != _T('\0'); i++) { TCHAR c = psz[i]; if ((c >= _T('0') && c <= _T('9')) || (c >= _T('a') && c <= _T('f')) || (c >= _T('A') && c <= _T('F'))) { // valid } else { delete [] psz; return 0; } } DWORD dwProcLen = 0; LPBYTE lpb = (LPBYTE)lpBuffer; if (lpb != NULL) { dwProcLen = min(dwLen - dwOffset, dwBufSize); LPCTSTR p = &psz[dwOffset * 2]; for (DWORD i = 0; i < dwProcLen; i++) { TCHAR sz[3] = _T(""); _tcsncpy(sz, p, 2); lpb[i] = BYTE(_tcstoul(sz, NULL, 16)); p = &p[2]; } } else { dwProcLen = dwLen - dwOffset; } delete [] psz; return dwProcLen; }Ich freue mich auf Anregungen.
chrische