|
Hi
The exact issue is in PreSubclassWindow() method of ReportCtrl class.
ASSERT(GetHeaderCtrl() != NULL);
ASSERT macro will work only in debug version and not in Release.
so it wont throw exception in release mode.
comment the above code in your class and try.
thks
Jibesh.V.P
Jibesh.V.P
www.m2India.com
|
|
|
|
|
that was it thank you...
greatly appreciate your help.
Lino
|
|
|
|
|
Hi, I've been creating, a semi-portable thread class.
all of it works fine, but i'm having trouble,
understanding how to pass the address of my structure,
through the void* of beginthreadex, and if then how to,
access the structure again from there.
here's a little code to help better explain my problem:
typedef struct {
char* szReference;
__w64 unsigned uHwnd;
unsigned uReferenceLength,
uIdentity,
uState;
} Thread_barrer;
void CCThread::SetFunction(unsigned(__stdcall *uFunction)(void*))
{
this->vfThreadProc = uFunction;
}
void CCThread::InitThread(Thread_barrer &tbObj)
{
tbObj.uHwnd = _beginthreadex(
0,0,vfThreadProc,(void*)&tbObj,
0,&tbObj.uIdentity);
}
but to pass the address of the context (&tbObj <above>) through void*
and access it inside:
unsigned __stdcall ThreadCentre(void *vArguments)
{
Thread_barrer tbObj;
printf("predicted address of tbObj: %d\n",vArguments);
return (1);
}
i'd assume that you could set another context to that address,
but it's not easy to find viable info , on such unique tasks.
note: this all compiles fine, I'm having trouble with using the address,
passed through __beginthreadex to access the context there of.
any tips, or ideals will help.
thank you.
A world without knowledge, is a world without life.
|
|
|
|
|
When you call _beginthreadex() you cast a Thread_ barrier* to void* , so in the thread function you just cast it back:
unsigned __stdcall ThreadCentre(void *vArguments)
{
Thread_barrer* ptbObj = (Thread_barrer*) vArguments;
...
}
--Mike--
LINKS~! Ericahist updated! | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
Thanks Mike, i had been trying stuff, close to that, but thanks.
|
|
|
|
|
Ok, i have a problem with classes. I have searched the forums, but all classes on here are so much more complex. (I know i'm a beginner, but we all have to start somewhere ) I have tried, but can't figure it out. I want this program to do two functions, as seen, and then show the sum of these two functions. I have to learn classes for a more difficlut uni assignment, so help would be great!
cheers!!!
#include <iostream.h>
class rectangle
{
public:
rectangle();
double sumA();
double sumB();
private:
double a,b,c,d,e,f,g;
};
int main ()
{
double a=0,b=0,c=0,d=0,e=0,f=0,sumA,sumB;
cout << "enter a\n";
cin >> a;
cout << "enter b\n";
cin >> b;
cout << "enter d\n";
cin >> d;
cout << "enter e\n";
cin >> e;
cout << "the size is: " << sumA()+sumB() << endl;
return 0;
}
rectangle::rectangle()
{
}
double rectangle :: sumA()
{
return c=a+b;
}
double rectangle :: sumB()
{
return f=d+e;
}
|
|
|
|
|
may want to declare an instance of the class in main()
rectangle rectMyClass;
rectMyClass.sumA();
rectMyClass.sumB();
and another tip, that may help you keep track of what is what,
is to make your variable names a bit more descriptive.
|
|
|
|
|
Cheers, I have managed to get it sorted now, thanks for the advice. I have managed to make another basic class program too. Thanks again.
|
|
|
|
|
Hi,
I've subclassed CComboBox. I've called WM_CTLCOLR_REFLECT. Which works perfectly well with the edit box. It's when I dropdown it's crashing the app. I want to able to change the colour of the listbox part as well.
I'm confident that someone here can supply code snippet that would solve the problem.
Thanks in advance,
Alton
|
|
|
|
|
Hi,
I'd like to be able to add items to cursor right-click menus in MS Word on-the-fly. For example, while editing a document I would like to add frequently used phrases to the context menu, then right-click and select a phrase, which would then be copied to the clipboard or copied into the document.
Any help on this topic or pointers will be appreciated. I couldn't find an Office-specific board to post this message, so I am posting it here!
Thanks in advance,
Todd
|
|
|
|
|
Hi there:
Has anyone had problems with crashes in a program that works perfectly in a Canadian/US Windows O/S, but has odd crashes when installed on a European Windows systems? Are there any problem places to look for possible errors? This crash occurs in the middle, not at initialization, at the beginning of loading a file.
I have been using plain ASCII not Unicode for some strings but these are hard coded. I know this is one of those idiotic non specific questions, but just sending it out in case someone has has seen this before.
Thanks in advance.
|
|
|
|
|
That's not really enough info to go by. But since you mentioned loading a file, are you by chance assuming the file will contain only ASCII (bytes 0-127), and your code breaks when it encounters data in another code page and/or characters above 127?
If you have the crash address, look that up in the .map file to find what function the address is in. If you don't currently make .map files, change your linker settings to do so and keep the .map file for any build you release publicly so you'll have them available in the future.
--Mike--
LINKS~! Ericahist updated! | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
Thank Michael. Good advice. One of my clients actually ran Dr. Watson and came up with the address at which it crashes, I checked the location, it was in cximage, but I coundn't trace back to where it had been called. I placed a breakpoint at the location indicated - it was a C0000005 error - reference to NULL pointer I believe, but oddly when I ran it never actually reaches this point in the execution, which to me means that something even odder is going on.
Microsoft (R) Windows 2000 (R) Version 5.00 DrWtsn32
Copyright (C) 1985-1999 Microsoft Corp. Alle Rechte vorbehalten.
Application exception occured:
Application: (pid=1544)
When: 07.02.2005 @ 19:02:44.078
Exception number: c0000005 (Zugriffsverletzung)
.
.
.
Status Image for Thread Identifier 0x614
eax=00000000 ebx=6c28376d ecx=0012f230 edx=ffffffff esi=0904f1c0 edi=0904f1c0
eip=0048e2d1 esp=0012f0ec ebp=0012f0f0 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
Function: <nosymbols>
0048e2bd cc int 3
0048e2be cc int 3
0048e2bf cc int 3
0048e2c0 55 push ebp
0048e2c1 8bec mov ebp,esp
0048e2c3 51 push ecx
0048e2c4 894dfc mov [ebp+0xfc],ecx ss:00bd8fd6=????????
0048e2c7 6a00 push 0x0
0048e2c9 8b4dfc mov ecx,[ebp+0xfc] ss:00bd8fd6=????????
0048e2cc e8333c0c00 call CxImage::SelectionToHRGN+0x210d (00551f04)
ERROR ->0048e2d1 8b00 mov eax,[eax] ds:00000000=????????
0048e2d3 8be5 mov esp,ebp
0048e2d5 5d pop ebp
0048e2d6 c3 ret
0048e2d7 cc int 3
0048e2d8 cc int 3
0048e2d9 cc int 3
0048e2da cc int 3
0048e2db cc int 3
0048e2dc cc int 3
0048e2dd cc int 3
0048e2de cc int 3
*----> Stack Back Trace <----*
FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0012F0F0 0052F208 0904F1C0 00000000 0012F160 6C2788EE !CxImage::IsValid
0012F264 0052EA74 0904F318 09049FD8 090BD280 00000000 !CxImage::GetWidth
0012F320 0052E760 0012F340 0904F1C0 0012F3A0 6C2837A8 !CxImage::GetWidth
0012F330 6C2837A8 0012F340 00000000 6C2D369C 01010056 !CxImage::GetWidth
0012F3A0 6C279D0A 0904F1C0 0904F1C0 0013D878 00100090 !Ordinal4874
0012F418 6C2799D5 0000000F 00000000 6C2D4158 0012F434 !Ordinal5163
0012F438 6C2788EE 0000000F 00000000 00000000 008006C4 !Ordinal6374
0012F498 6C278AFB 00000000 000601C8 0000000F 00000000 !Ordinal1109
0012F4B8 6C2A13A8 000601C8 0000000F 00000000 00000000 !Ordinal1578
0012F4E4 77E02CA8 000601C8 0000000F 00000000 00000000 !Ordinal1579
0012F504 77E04764 6C2A136F 000601C8 0000000F 00000000 user32!GetSysColor
0012F520 77E04720 008F37B8 0000000F 00000000 00000000 user32!SetWindowTextW
0012F548 778A15EF 0012F558 00000018 008F37B8 0000000F user32!SetWindowTextW
0012F5E8 77E0577D 008006C4 00000001 6C27E710 008006C4 ntdll!KiUserCallbackDispatcher
008006C4 0000000F 00000000 00000000 000D2FEA 000001F9 user32!DispatchMessageA
.
.
.
eax=00130110 ebx=00150518 ecx=00000022 edx=00000000 esi=00150418 edi=00000100
eip=778839c7 esp=0b77fe28 ebp=0b77ff74 iopl=0 nv up ei pl nz na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000202
Function: NtReplyWaitReceivePortEx
778839bc b8ac000000 mov eax,0xac
778839c1 8d542404 lea edx,[esp+0x4] ss:0c229d0f=????????
778839c5 cd2e int 2e
778839c7 c21400 ret 0x14
778839ca 8b4710 mov eax,[edi+0x10] ds:00aa9fe6=????????
778839cd 8b483c mov ecx,[eax+0x3c] ds:00bd9ff6=????????
778839d0 f6400801 test byte ptr [eax+0x8],0x1 ds:00bd9ff6=??
778839d4 7502 jnz RtlCreateProcessParameters+0xd (77883cd8)
778839d6 03c8 add ecx,eax
778839d8 894de4 mov [ebp+0xe4],ecx ss:0c229e5a=????????
778839db 8b4710 mov eax,[edi+0x10] ds:00aa9fe6=????????
778839de 668b4038 mov ax,[eax+0x38] ds:00bd9ff7=????
778839e2 668945e0 mov [ebp+0xe0],ax ss:0c229e5b=????
778839e6 668945e2 mov [ebp+0xe2],ax ss:0c229e5b=????
778839ea 53 push ebx
*----> Stack Back Trace <----*
FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0B77FF74 77D2D9DB 77D2DD59 00150418 4014FF60 00000070 ntdll!NtReplyWaitReceivePortEx
0B77FFA8 77D2DD0B 0014F5A8 0B77FFEC 77E7987C 00150518 rpcrt4!RpcBindingSetOption
0B77FFB4 77E7987C 00150518 4014FF60 00000070 00150518 rpcrt4!RpcBindingSetOption
0B77FFEC 00000000 00000000 00000000 00000000 00000000 kernel32!SetThreadExecutionState
Status Image for Thread Identifier 0x560
eax=77a7e915 ebx=00000102 ecx=0014f5d0 edx=00000000 esi=77889153 edi=0b87ff74
eip=7788915e esp=0b87ff60 ebp=0b87ff7c iopl=0 nv up ei pl nz na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000206
Function: ZwDelayExecution
77889153 b832000000 mov eax,0x32
77889158 8d542404 lea edx,[esp+0x4] ss:0c329e47=????????
7788915c cd2e int 2e
7788915e c20800 ret 0x8
*----> Stack Back Trace <----*
FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0B87FF7C 77E8AC79 0000EA60 00000000 77A50216 0000EA60 ntdll!ZwDelayExecution
00007530 00000000 00000000 00000000 00000000 00000000 kernel32!Sleep
Status Image for Thread Identifier 0x5f0
eax=77c673ab ebx=00000002 ecx=00000020 edx=00000000 esi=77893233 edi=00000002
eip=7789323e esp=0b97fe5c ebp=0b97fea8 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00000246
Function: NtWaitForMultipleObjects
77893233 b8e9000000 mov eax,0xe9
77893238 8d542404 lea edx,[esp+0x4] ss:0c429d43=????????
7789323c cd2e int 2e
7789323e c21400 ret 0x14
*----> Stack Back Trace <----*
FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name
0B97FEA8 77E03990 0B97FE80 00000001 00000000 0B97FEA0 ntdll!NtWaitForMultipleObjects
0B97FF04 77E03A5C 0B97FED0 77CA4190 0000EA60 00000041 user32!MsgWaitForMultipleObjectsEx
0B97FF20 77C62973 00000001 77CA4190 00000000 0000EA60 user32!MsgWaitForMultipleObjects
0B97FF74 77C6744C 0B97FFA0 0B97FFA4 0B97FFA8 0B97FF9C shlwapi!PathBuildRootW
0B97FFAC 77C673D4 0013C540 77E7987C 00000000 0015C538 shlwapi!Ordinal307
0B97FFEC 00000000 77C673AB 00000000 00000000 000000C8 shlwapi!Ordinal307
.
.
.
The breakpoint at SelectionToHRGN was never arrived at when trying to reproduce the error described - loading a file.
|
|
|
|
|
Yeah, that's a NULL ptr dereference. C0000005 is an access violation, meaning the code is accessing a bogus address. The line of the crash is mov eax,[eax] (dereferencing the address in eax ) but eax is zero.
If you use the same input file on an ENglish system, does the code run? If so, then I'd start by contacting the library's author and seeing if he knows about the problem.
--Mike--
LINKS~! Ericahist updated! | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
The library was written by an Italian guy actually, so it seems odd that international errors would occur. It may be one of those corruption problems where memory gets messed up and shows an error in another place downstream that is the subject of the corruption.
|
|
|
|
|
For your problems, MiniDumps, as described in http://www.codeproject.com/debug/postmortemdebug_standalone1.asp[^] and http://www.codeproject.com/tools/minidump.asp[^] may be excatly what you need.
They allow you to get a call stack written on the customers machine, without giving the customer a special debug-build or symbol information (he may use to reverse-engeneer your code).
The customer returns you the minidump-file, and you use your debugger to get a frozen image of the point where the crash occured, complete with callstack (but without variable values).
Maybe it helps to go this length, when you are otherwise unable to reproduce the error.
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
Thanks I will look into it. Does this work with VC++ 6.0 by any chance?
Every nation ridicules other nations, and all are right. - Schopenhauer
|
|
|
|
|
JWood wrote:
Does this work with VC++ 6.0 by any chance?
I have not tried it - my project was working with VC++ 7.0 anyway.
But I remember to have read smething about 'VC++ 7 only'. I am not sure about that, though.
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
Hi there...
Guess this is just my week for inane behavior.
I have implemented a tab control in a child window. It behaves as intended, I can insert tabs, select tabs, get data from them, change focus, etc, etc.
However, the string for the tab refuses to appear on the display ?? I've tried a number of different methods to put the string into the TC_ITEM struct (std::string, C string buffer, strcpy, string literal, sprintf). It all compiles and when traced with a debugger the string appears to have been copied to the TC_ITEM appropriately and when I get the tab after a user has selected it, the string is populated as I had set it. The control is just refusing to display it at run time.
a code snippet of my population method follows.
Would someone be so kind as to point out what I am doing wrong?
Thanks
Dave
--- cut & paste -----------------------------
// got a new element, populate a tab
char nodename[50];
ZeroMemory( nodename, sizeof(char) * 50 );
sprintf( nodename, "%s", r->name.c_str() );
TC_ITEM tab;
tab.dwStateMask = TCIF_TEXT | TCIF_PARAM | TCIF_IMAGE;
tab.dwState = 0;
tab.iImage = -1;
tab.pszText = (LPSTR)nodename;
tab.lParam = (LPARAM)r;
tab.cchTextMax = 25;
index = list.size();
// insert the tab into the display
if( TabCtrl_InsertItem( hTab, index, &tab ) > -1 )
{
// focus on tab
TabCtrl_SetCurSel( hTab, index );
TabCtrl_SetCurFocus( hTab, index );
// store the tab
list.push_back( tab );
}
else
{
MessageBox( NULL, "An unexpected error has occured while inserting tab!", "Tab Cntrl Error", MB_ICONERROR|MB_OK );
LOG->Write( "recview.h", sal::Log::error, "In UpdateTabs(): failed to insert new tab" );
}
|
|
|
|
|
Perhaps tab 's lpReserved1 and lpReserved2 members contain random values? (They must be zero.) Try ZeroMemory() 'ing tab before using it.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
I see four problems there.
1. You're not zero-initializing the TCITEM struct. Always do this.
TCITEM tab = {0}; 2. The TCIF_* flags go in the mask member, not dwStateMask .
3. The cchTextMax member is set to 25, not the actual length of the string. cchTextMax is actually not used when you're setting the text, since the control assumes the string is zero-terminated, but the fact that you're setting it wrong makes me think you'll have problems elsewhere when cchTextMax is used.
4. You're storing a TCITEM struct in a list, but the TCITEM contains a pointer to a char array on the stack. As soon as that array goes out of scope, the pointer becomes invalid.
--Mike--
LINKS~! Ericahist updated! | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
Thanks for the replies!
As it turned out, you were on the money with the mask member. This is my first forary into tab controls, and obviously misread the MSDN docs.
Michael Dunn wrote:
4. You're storing a TCITEM struct in a list, but the TCITEM contains a pointer to a char array on the stack. As soon as that array goes out of scope, the pointer becomes invalid.
Sorry for the confusion, I should have explained the snippet more clearly to avoid leading people down the wrong track. "list" is actually a ref to a vector passed in to the function.
so, in following everyones advice, I changed the struct definition to:
TC_ITEM tab = {0};
tab.mask = TCIF_TEXT | TCIF_PARAM | TCIF_IMAGE;
tab.dwState = 0;
tab.iImage = -1;
tab.pszText = (LPSTR)r->name.c_str();
tab.lParam = (LPARAM)r;
tab.cchTextMax = r->name.size() + 1;
this solved the display poblem, so my control is fully operational now.
Thanks for all the help, this board has been great!
Dave
|
|
|
|
|
Glad you got it working But you missed my point about keeping TCITEM structs in a list (or vector, doesn't matter). TCITEM::pszText is a pointer to a char array, and you're storing the pointer without storing what it points to as well. Later on if you try to read/write to a pszText pointer, it will be pointing into freed memory or other data, not the original string.
--Mike--
LINKS~! Ericahist updated! | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
I have a library consisting of lots of files. I have one single #include file which includes all the relevant header files, depending on the compile platform. However, I would like to shove all the classes that are declared in the library into one namespace, but don't want to have to go through every #include file and put namespace blah {} around the classes and then have to put blah:: in front of every blinking function. Is there a way of grouping a collection of classes and uploading them into a namespace?
|
|
|
|
|
Add a namespace around the includes:
namespace LibraryStuff
{
#include <libheader1.h>
#include <libheader2.h>
...
} You'd only do this in the code that's using the library, the library itself would remain unchanged.
--Mike--
LINKS~! Ericahist updated! | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|