Re: Flex Grid control issue, - Exception code: E06D7363
On Sep 7, 5:52 pm, Joseph M. Newcomer <newco...@flounder.com> wrote:
See (far) below...
On Mon, 7 Sep 2009 01:15:58 -0700 (PDT), Vritti <mosgeo...@gmail.com> wro=
te:
On Sep 6, 5:46 pm, Joseph M. Newcomer <newco...@flounder.com> wrote:
I'm going to make a few guesses here...
We see it is in ole32, which would be called because this is a flexgri=
d control with an
OLE interface.
But this calls something in C:\5300\BIN_RE~1. This is mysterious. =
I do not know what
ResultHandler.dll is. So I'd try to track down exactly what ResultH=
andler.dll is and what
it does and who wrote it. Because what it looks like is that Result=
Handler is either
calling MFC71.DLL to issue an error message, or has called MFC71.DLL w=
ith invalid
parameters. I did not find any resulthandler.dll on my VS installat=
ion, for either VS6,
VS2003, VS2005 or VS2008. If ResultHandler is your DLL, then what h=
as happened is that
you should look there first to see what is being called. It appears=
to be a side effect
of something triggered by the SetRedraw, which, as you point out, does=
seem odd. It could
also be some callback function established by putting your own or some=
third-party object
in a cell of thegridcontrol.
Unless you are relying on the debugger to tell you that the line where=
the error occurred
was SetRedraw; this could also mean that this was the *return address*=
of the call,
meaning it was on the line *preceding* the SetRedraw.
I'm not sure why the MFC runtime is in C:\5300\BIN_RE~1, because this =
doesn't look like
any SxS directory I've seen before. Can you enlighten us at all abo=
ut this, if you have
any information that could help?
Note also that you could be the victim of a drive-by memory damage, wh=
ere someone has
accidentally scribbled all over some part of your control's data, and =
this has caused the
malfunction. The fact that it takes a while for this to happen is *=
suggestive* of a
memory overrun/invalid pointer store problem. Running under the App=
lication Verifier
might help isolate the problem, but again this is just a bit of guessw=
ork on my part.
These are the things I would start looking at if this were on my machi=
ne. I admit it
isn't much to go on at this point, but perhaps in the exploration you =
might uncover
something else interesting.
=
joe
On Sun, 6 Sep 2009 04:59:49 -0700 (PDT), Vritti <mosgeo...@gmail.com> =
wrote:
Hi,
I have a serious problem that happens a long time on a customer site
with aflexgridcontrol, which reproduced periodically, each two
weeks. I tried to install the newestFlexGridcontrol, and insured
that it registered successfully, but it's still happen. I wonder if
someone encountered with the following problem or / and can help with
it:
After two weeks of work, sometimes, the exception (see details below)
appears andFlexGridcontrol stops work. After analyzing the dump
file, I see that it's happen when calling SetRedraw(FALSE) offl=
ex
gridcontrol. The pointer offlexcontrol is not null and should be
valid.
Exception code: E06D7363
Fault address: 7C812A5B 01:00011A5B C:\WINDOWS
\system32\kernel32.dll
Registers: EAX:1EF1EEA4 EBX:00000000 ECX:00000000 EDX:80B90027 ESI=
:
1EF1EF34 EDI:1EF1EF34 CS:EIP:001B:7C812A5B SS:ESP:0023:1EF1EEA0=
EBP:
1EF1EEF4 DS:0023 ES:0023 FS:003B GS:0000 Flags:0000020=
6
Call stack: Address Frame Logical addr Module 7C=
812A5B
1EF1EEF4 0001:00011A5B C:\WINDOWS\system32\kernel32.dll
7C359AED 1EF1EF34 0001:00018AED C:\5300\BIN_RE~1\MSVCR71.dll
7C1F4872 1EF1EF54 0001:000B3872 C:\5300\BIN_RE~1\MFC71.DLL
7C17FB83 1EF1EFD8 0001:0003EB83 C:\5300\BIN_RE~1\MFC71.DLL
7C14721A 1EF1EFF8 0001:0000621A C:\5300\BIN_RE~1\MFC71.DLL
11751D66 1EF1F06C 0001:00050D66 C:\5300\BIN_RE~1\ResultHandler.=
dll
11715EC4 1EF1F11C 0001:00014EC4 C:\5300\BIN_RE~1\ResultHandler.=
dll
11715D65 1EF1F1AC 0001:00014D65 C:\5300\BIN_RE~1\ResultHandler.=
dll
117156BB 1EF1F238 0001:000146BB C:\5300\BIN_RE~1\ResultHandler.=
dll
1173A8DB 1EF1F2E4 0001:000398DB C:\5300\BIN_RE~1\ResultHandler.=
dll
117389ED 1EF1F4F4 0001:000379ED C:\5300\BIN_RE~1\ResultHandler.=
dll
1174C333 1EF1F59C 0001:0004B333 C:\5300\BIN_RE~1\ResultHandler.=
dll
77E79DC9 1EF1F5BC 0001:00008DC9 C:\WINDOWS\system32\RPCRT4.dll
77EF321A 1EF1F9C4 0002:0000021A C:\WINDOWS\system32\RPCRT4.dll
77EF3BF3 1EF1FA1C 0002:00000BF3 C:\WINDOWS\system32\RPCRT4.dll
77600C31 1EF1FA5C 0002:00000C31 C:\WINDOWS\system32\ole32.dll
77600BDB 1EF1FAA4 0002:00000BDB C:\WINDOWS\system32\ole32.dll
7750F237 1EF1FB7C 0001:0002E237 C:\WINDOWS\system32\ole32.dll
7750F15C 1EF1FB98 0001:0002E15C C:\WINDOWS\system32\ole32.dll
7750FC79 1EF1FBC4 0001:0002EC79 C:\WINDOWS\system32\ole32.dll
77600E3B 1EF1FBF8 0002:00000E3B C:\WINDOWS\system32\ole32.dll
776009BC 1EF1FCCC 0002:000009BC C:\WINDOWS\system32\ole32.dll
77600DF2 1EF1FCF8 0002:00000DF2 C:\WINDOWS\system32\ole32.dll
7750FCB3 1EF1FD0C 0001:0002ECB3 C:\WINDOWS\system32\ole32.dll
7750FAE9 1EF1FD24 0001:0002EAE9 C:\WINDOWS\system32\ole32.dll
77D48734 1EF1FD50 0001:00007734 C:\WINDOWS\system32\USER32.dll
77D48816 1EF1FDB8 0001:00007816 C:\WINDOWS\system32\USER32.dll
77D489CD 1EF1FE18 0001:000079CD C:\WINDOWS\system32\USER32.dll
77D496C7 1EF1FE28 0001:000086C7 C:\WINDOWS\system32\USER32.dll =
>
Any help is appreciated.
Thanks
George S.
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm
Hi Joseph,
Thanks for trying to help, here some clarifications:
1. C:\5300\BIN_RE~1 =96 is folder where all binaries are stored on
client computer, this is an answer why all mfc dependency are copied
there.
2. ResultHandler =96 is my component, which holds FlexGrid control,
11751D66 1EF1F06C 0001:00050D66 C:\5300\BIN_RE~1\ResultHandler.dll
- this trace pointing to row:
m_pGrid->SetRedraw(FALSE);
See all function below.
When calling this function, an exception is thrown.
HRESULT CGridDataSource::FillGridRow()
{
HRESULT hr(S_OK);
CString strRow;
m_pGrid->SetRedraw(FALSE);
****
Note that your exception code started with E. This means it is a serio=
us error from a
nominally non-Microsoft (but in this case, non-Kernel) component. The =
interpretation
Bits 31-30 11 means "a serious error"
Bit 29 1 means "a non-Microsoft co=
mponent"
Bit 28 0 always
1110 = E. So it is the grid control that is throwing the exception f=
or some reason.
Next, note that you do not actually know if you are calling CWnd::SetRedr=
aw or a method of
the grid class which is *also* called SetRedraw.
One of the reasons I avoid the MS FlexGrid component is that IT IS TOTALL=
Y UNDOCUMENTED. I
went through massive pain and agony trying to figure it out the last time=
I used it (at a
client's specific request) but since they were paying me lots of money to=
figure it out, I
did it. These many years later, I tried again. I cannot locate any doc=
umentation in the
MSDN. Surely, if this control were a real, supported component there w=
ould be a COMPLETE
reference; I get 7 items, one describing what happens if I get an error a=
bout not having a
license for the ActiveX control, one on how to use the RDS DataFactory, o=
ne on getting a
TargetInvocationException if I use it in a service, one on an error cause=
d by using a VB6
control in VS2005 or later, one on how to use the VB upgrade wizard, one =
on how to create
a hierarchical record set, and one on the VB.NET resource kit. Not one=
single reference
to the MSFlexGrid control itself.
So until you can be sure that your call of Redraw is not a method of the =
MSFlexGrid (I do
see that several other ActiveX components have their own SetRedraw implem=
entations), it
could mean that an internal method of MSFlexGrid is being called, and con=
sequently, this
might be doing some kind of validation of the control, and therefore if t=
he control is
damaged (e.g., by a data overrun somewhere in memory) this exception migh=
t represent a
corrupted-data exception thrown by the control. The fact that it is a =
user-defined
exception pretty much suggests that this exception is being thrown by MSF=
lexGrid, but
since the exception is not documented (since MSFlexGrid is not documented=
) it is hard to
guess what it means.
joe
****
int nFieldCount = m_arrayFields.GetUpperBound() + 1;
for (int i=0;i < nFieldCount;++i)
{
CString strValue;
if (FAILED(GetFieldValue(m_arrayFields[i], strValue)))
{
hr = RH_E_FIELD_NOT_FOUND;
break;
}
strRow += strValue;
if (i != (nFieldCount - 1))
strRow += _T("\t");
}
long lRows = m_pGrid->GetRows();
if (lRows > m_nMaxRowsInGrid)
{
m_pGrid->RemoveItem(1);
lRows -= 2;
}
else
lRows -= 1;
ASSERT(m_pGrid);
m_pGrid->AddItem((LPCTSTR)strRow, _variant_t(lRows));
if (CDataGridEvents::m_bAutoScroll)
{
m_pGrid->SetTopRow(lRows+1);
}
m_pGrid->SetRedraw(TRUE);
return (hr);
}
Thanks forward
George S.
Joseph M. Newcomer [MVP]
email: newco...@flounder.com
Web:http://www.flounder.com
MVP Tips:http://www.flounder.com/mvp_tips.htm
Thanks a lot for your help.
George S.