Re: Crash in GetColumn API of CListCtrl during Printing to Printer
On Oct 5, 6:37 pm, Joseph M. Newcomer <newco...@flounder.com> wrote:
This is what you should have provided with the question. Of course, we=
now have TWO
pieces of information, but nothing describing what you mean by the nonsen=
se phrase
"crash". It doesn't matter what happens when a debugger is not connect=
ed; it matters
greatly what happens when it is. You saw something that led you to bel=
ieve this is a
"crash", whatever THAT means. What was it? Why is the code shown be=
low considered to be
interesting? What is its relationship to the event you described with =
the meaningless
word "crash"?
Are you using multiple threads?
joe
On Tue, 5 Oct 2010 02:32:33 -0700 (PDT), Kuenga <sagku...@gmail.com> wrot=
e:
Below is the stack trace:
// special version of CThreadSlotData::GetData that only works with
// thread local storage (and not process local storage)
// this version is inlined and simplified for speed
inline void* CThreadSlotData::GetThreadValue(int nSlot)
{
EnterCriticalSection(&m_sect);
ASSERT(nSlot != 0 && nSlot < m_nMax);
ASSERT(m_pSlotData != NULL);
ASSERT(m_pSlotData[nSlot].dwFlags & SLOT_USED);
ASSERT(m_tlsIndex != (DWORD)-1);
if( nSlot <= 0 || nSlot >= m_nMax ) // check for retail=
builds.
{
LeaveCriticalSection(&m_sect);
return NULL;
}
CThreadData* pData = (CThreadData*)TlsGetValue(m_tlsIndex=
);
if (pData == NULL || nSlot >= pData->nCount)
{
LeaveCriticalSection(&m_sect);
return NULL;
}
void* pRetVal = pData->pData[nSlot];
LeaveCriticalSection(&m_sect);
return pRetVal;
}
kernel32.dll!7c809e2c()
[Frames below may be incorrect and/or mi=
ssing, no
symbols loaded for kernel32.dll]
winspool.drv!73001362()
winspool.drv!73001362()
comctl32.dll!773eade5()
winspool.drv!73001362()
winspool.drv!73001362()
user32.dll!7e41882a()
nvoglnt.dll!6974466f()
comctl32.dll!773eb171()
user32.dll!7e428eab()
comctl32.dll!7743afbf()
comctl32.dll!7743c31f()
user32.dll!7e458763()
ntdll.dll!7c90e473()
comctl32.dll!7741e343()
mfc80.dll!CThreadSlotData::GetThreadValu=
e(int
nSlot=0) Line 265 C++
mfc80.dll!CThreadLocalObject::GetData(CN=
oTrackObject *
(void)* pfnCreateObject=0x781ff99d) Line 430 + 0x5 bytes C+=
+
mfc80.dll!AfxGetModuleThreadState() L=
ine 468 + 0x16
bytes C++
mfc80.dll!afxMapHWND(int bCreate=-1) =
Line 298 + 0x5
bytes C++
mfc80.dll!___sse2_available_init() + =
0x1f1b
bytes C++
0000036d()
mfc80.dll!CWnd::WindowProc(unsigned int =
message=877,
unsigned int wParam=4, long lParam=0) Line 1742 + 0x13 bytes
C++
user32.dll!7e418816()
user32.dll!7e41882a()
user32.dll!7e41882a()
user32.dll!7e42a013()
user32.dll!7e42a998()
mfc80.dll!CWnd::DefWindowProcA(unsigned =
int nMsg=553,
unsigned int wParam=25803220, long lParam=25803224) Line 1035 + 0=
x13
bytes C++
mfc80.dll!CWnd::WindowProc(unsigned int
message=962584, unsigned int wParam=962584, long lParam=962632) =
Line
1742 + 0x13 bytes C++
00000030()
ntdll.dll!7c91797c()
mfc80.dll!CThreadLocalObject::GetData(CN=
oTrackObject *
(void)* pfnCreateObject=0x781ff99d) Line 430 + 0x5 bytes C+=
+
mfc80.dll!AfxGetModuleThreadState() L=
ine 468 + 0x16
bytes C++
mfc80.dll!AfxCallWndProc(CWnd * pWnd=0=
x00000000,
HWND__ * hWnd=0x001408a4, unsigned int nMsg=553, unsigned int
wParam=2147344384, long lParam=25802880) Line 257 + 0x5
bytes C++
mfc80.dll!AfxWndProc(HWND__ * hWnd=0x0=
0000000,
unsigned int nMsg=277666050, unsigned int wParam=25802948, long
lParam=2015361566) Line 388 + 0x10 bytes C++
kernel32.dll!7c80a72d()
mfc80.dll!AFX_MAINTAIN_STATE2::~AFX_MAIN=
TAIN_STATE2()
Line 66 C++
mfc80.dll!AfxWndProcBase(HWND__ * hWnd=
=, unsigned int
nMsg=, unsigned int wParam=, long lParam=) Line 411 + 0x26
bytes C++
user32.dll!7e458753()
user32.dll!7e458763()
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e41885a()
user32.dll!7e41882a()
nvoglnt.dll!6974466f()
user32.dll!7e41882a()
user32.dll!7e428ea0()
user32.dll!7e428eab()
user32.dll!7e428eab()
user32.dll!7e458753()
user32.dll!7e458763()
mfc80.dll!CThreadSlotData::GetThreadValu=
e(int
nSlot=0) Line 265 C++
mfc80.dll!CThreadSlotData::GetThreadValu=
e(int
nSlot=0) Line 265 C++
mfc80.dll!CThreadSlotData::GetThreadValu=
e(int
nSlot=0) Line 265 C++
mfc80.dll!CThreadLocalObject::GetData(CN=
oTrackObject *
(void)* pfnCreateObject=0x7e429165) Line 430 + 0x5 bytes C+=
+
user32.dll!7e429135()
user32.dll!7e429165()
mfc80.dll!CWnd::AttachControlSite(CHandl=
eMap *
pMap=0x0400c260) Line 445 C++
mfc80.dll!CWnd::FromHandle(HWND__ * hWnd=
=0x00000001)
Line 311 C++
MSCTF.dll!74755f00()
MSCTF.dll!7473f87f()
mfc80.dll!CThreadLocalObject::GetData(CN=
oTrackObject *
(void)* pfnCreateObject=0x781ff99d) Line 430 + 0x5 bytes C+=
+
mfc80.dll!AfxGetModuleThreadState() L=
ine 468 + 0x16
bytes C++
user32.dll!7e419c2e()
user32.dll!7e419c17()
user32.dll!7e419d4d()
user32.dll!7e419d60()
MSCTF.dll!7475577a()
MSCTF.dll!74755d2a()
user32.dll!7e4277b0()
user32.dll!7e4277f7()
ntdll.dll!7c90da2a()
kernel32.dll!7c8024c7()
MSCTF.dll!74725951()
MSCTF.dll!74725956()
user32.dll!7e418a80()
MSCTF.dll!74725956()
user32.dll!7e42b401()
MSCTF.dll!74731331()
MSCTF.dll!74731336()
MSCTF.dll!74731336()
user32.dll!7e431923()
user32.dll!7e42b317()
user32.dll!7e42b326()
user32.dll!7e42b326()
user32.dll!7e430238()
user32.dll!7e430248()
ntdll.dll!7c90e473()
user32.dll!7e419d84()
user32.dll!7e42993c()
comdlg32.dll!763c0086()
comdlg32.dll!763d283c()
comdlg32.dll!763d316c()
ntdll.dll!7c910222()
ntdll.dll!7c910222()
ntdll.dll!7c91019b()
ntdll.dll!7c9101db()
msvcp80.dll!
std::basic_string<char,std::char_traits<char>,std::allocator<char>
::compare(unsigned int _Off=1051462, unsigned int _N0=273, const ch=
ar
* _Ptr=0x00000001, unsigned int _Count=1641422) Line 1978 + 0x23
bytes C++
user32.dll!7e418734()
user32.dll!7e423ce4()
user32.dll!7e423d34()
user32.dll!7e423d00()
user32.dll!7e423d00()
user32.dll!7e423b30()
user32.dll!7e423b41()
user32.dll!7e43e577()
user32.dll!7e43e577()
user32.dll!7e43e599()
user32.dll!7e418734()
ntdll.dll!7c9100b8()
ntdll.dll!7c910041()
ntdll.dll!7c91005d()
user32.dll!7e41885a()
user32.dll!7e41882a()
user32.dll!7e4188d1()
user32.dll!7e4188da()
comctl32.dll!77421145()
comdlg32.dll!763d251d()
comdlg32.dll!763d316c()
user32.dll!7e42a5a6()
user32.dll!7e42f360()
ntdll.dll!7c9100b8()
mfc80.dll!CThreadSlotData::GetThreadValu=
e(int
nSlot=0) Line 265 C++
mfc80.dll!CThreadLocalObject::GetData(CN=
oTrackObject *
(void)* pfnCreateObject=0x781ff99d) Line 430 + 0x5 bytes C+=
+
mfc80.dll!AfxGetModuleThreadState() L=
ine 468 + 0x16
bytes C++
mfc80.dll!AfxWndProc(HWND__ * hWnd=0x0=
0180b80,
unsigned int nMsg=78, unsigned int wParam=0, long lParam=25807444)
Line 388 + 0x10 bytes C++
mfc80.dll!AfxWndProcBase(HWND__ * hWnd=
=0x00180b80,
unsigned int nMsg=78, unsigned int wParam=0, long lParam=25807444)
Line 411 + 0x16 bytes C++
user32.dll!7e418734()
user32.dll!7e418816()
user32.dll!7e42a013()
user32.dll!7e42a998()
user32.dll!7e418734()
user32.dll!7e418816()
nvoglnt.dll!6974466f()
user32.dll!7e428ea0()
user32.dll!7e428eec()
ntdll.dll!7c90e473()
user32.dll!7e4194be()
user32.dll!7e42c174()
user32.dll!7e4292e3()
comctl32.dll!773eb001()
user32.dll!7e4186e7()
comctl32.dll!77410336()
comctl32.dll!774138ab()
comdlg32.dll!763cfca8()
comdlg32.dll!763d38b2()
comdlg32.dll!763d38e9()
user32.dll!7e418734()
...
read more =BB- Hide quoted text -
- Show quoted text -
Thanks David and Joseph for ur time..I also found hard to describe the
problem..Following initialization was been done
LV_COLUMN lvc;
lvc.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_IMAGE;
lvc.cx=PropNameSize.cx + 10;
lvc.pszText=szBuff;
lvc.cchTextMax=sizeof(szBuff);
lvc.iImage=-1;
Removing the statement lvc.iImage=-1; resolved the crash. But on some
machine it worked fine ( may be due to different Microsoft Dlls used )
Thanks