|
Thank you Aescleal,
Yes the CCatalogView is created on the stack and I did know that from the beggining, but I was wondering about the time are happenning all these things.
1. I create on the stack the CCatalogView
2. Inside the CCatalogView class I create a Win32 Window (using Create). Really, does this window is created on the heap or in the stack ? I assume that is created on the stack. Anyway, I tried to explicitly create this window on the heap, using new (on the CreatePane) & delete (on the destructor) functions but it also fails.
3. Now, according to my assumptions that both objects are in the stack, at the exiting procedure, it disposes first the last inserted item which is the Win32 Window (as I mentioned, I assume it created on the stack) and then the CCatalogView class itleft.
What's of the above assumptions are wrong ? That is what I did not understand.
Regards,
George
PS: Reading your comment again, you assume that the MFC Framework when is trying to delete the Window itself, is deleting also the class that is associated with that window. Maybe, is something that I did not understand well. Can you please clarify that ?
sdancer75
|
|
|
|
|
Ok, I found the cause of the problem.
The default for views is to allocate them on the heap and the default post-cleanup is to 'delete this '.
So, in my situation I created the window in the stack, like it shows below.
VERIFY(Create(_T("MyWind"), NULL, WS_CHILD | WS_VISIBLE, CXTPEmptyRect(), pParentWnd, IDD_TABSHEET2, &context));
The default behavior of the CView cleanup is to delete this . Indeed, if you check inside the viewcore.cpp you will see, something like this :
void CView::PostNcDestroy()
{
delete this;
}
That thing is all screwed up in my case. The solution ? Just override the CCatalogView::PostNcDestroy and comment the CFormView::PostNcDestroy(); to prevent calling the CView::PostNcDestroy .
void CCatalogView::PostNcDestroy()
{
_ASSERTE( _CrtCheckMemory( ) );
}
Hope, it helps someone.
Regards,
sdancer75
|
|
|
|
|
Hi,
I am getting an exception when debugging a application after invoking CWinThread
The following is my invocation of AfxBeginThread
<pre lang='cpp'>
AfxBeginThread(RUNTIME_CLASS(SockCLeintThread),
THREAD_PRIORITY_NORMAL,
0,CREATE_SUSPENDED);
</pre>
The way I read the documentation if the first parm is CRuntimeClass* pThreadClass
the way I have it coded then its a UI thread
However while debugging the application and looking at the Thread DEBUG->
WINDOWS->THREADS The Visual Studio debugger marks the thread as a worker thread
I create the thread in a modal Dialog after at the end of one of the methods of modal dialog box I destory the modal dialog box via EndDialog don't know if this a issue
Also can sone one tell me What the /MD and /MT linker options are
Thanks
|
|
|
|
|
It is probably because the thread is in a suspended state and has not started running.
|
|
|
|
|
I resume the thread
myprog->progsocket->ResumeThread(); // get it going
However one I comment out anything the destroys e.g. EndDialog the Modal Dialog box whose method
I was while creating the CWinThread the exception disappears
I am wondering since I create a UI thread it associates the CWinThread with the modal
Dialog Box and when the modal Dialog Box disappears it destroys anything associated
with it e.g. the CWinThread object and anything releated to that object
code in question don't know whay my pre tags aren't taking
<pre lang='cpp'>
CprogDebug *myprog; // instantiate a Debug Class modless CDialog derived class
myprog = new CprogDebug; // Allocate on the Heap
if (myprog == NULL)
MessageBox("CprogDebug","CprogDebug Error",MB_ICONERROR);
myprog->jobname = jobname; // copy over jobname
myprog->progname = progname; // copy over progname
myprog->proglisting = dlg.GetPathName();
EndDialog(0); // Kill the Dialog
// dlg.~dlg();
myprog->Create(IDD_PROGDBG,NULL); // Attach it to a window
myprog->progsocket = (SockCLeintThread *) AfxBeginThread(RUNTIME_CLASS)
(SockCLeintThread),
THREAD_PRIORITY_NORMAL,
0,CREATE_SUSPENDED);
if (myprog->progsocket == NULL)
MessageBox("Socket","Prog Socket Error",MB_ICONERROR);
myprog->progsocket->sendwindow = (CWnd *) myprog;
// set window to receive TCP/IP messages
myprog->progsocket->m_pActiveWnd = (CWnd *) myprog; // <== point to newwindow
myprog->progsocket->m_pMainWnd = (CWnd *) myprog; // ditto
myprog->progsocket->ipaddr = "192.168.1.4"; // ip address
CHERC_CMDApp *main_app = (CHERC_CMDApp *)AfxGetApp();
int i = 0;
while(main_app->ports[i].busy != 0)
{
i++;
}
myprog->progsocket->port = main_app->ports[i].port; // port
main_app->ports[i].busy = 1;
// Tcpipthread = progsocket->m_nThreadID; // thread id
// myprog.progsocket->thisocket.send_wnd = myprog.progsocket->sendwindow;
myprog->progsocket->thisocket->send_wnd = (CWnd *) myprog;
strcpy((char *)&myprog->progsocket->thread_id,"DebugSocket");
myprog->progsocket->thisocket->thread_no = i; //
myprog->Tcpipthread = myprog->progsocket->m_nThreadID;
myprog->progsocket->ResumeThread();
</pre>
Event though I explictily point to another modless dialog I create on the heap
while in the modless Dialog Box method
|
|
|
|
|
sorry in last sentence I meant Eventhough I explictly destroy the <b> modal </b> dialog box
|
|
|
|
|
Yeah so this is the kind of problem you get when trying to do things outside the 'usual way of doing it'.
So just create your thread normally and implement your own messaging system as I suggested in your earlier post.
==============================
Nothing to say.
|
|
|
|
|
ForNow wrote: can sone one tell me What the /MD and /MT linker options are
Check the documentation[^].
|
|
|
|
|
Nah, thats too hard. It is easier to type an entire question into CP than those two switches into google....
==============================
Nothing to say.
|
|
|
|
|
In this case I went direct to MSDN, so no need for Google. Who said TINA?
|
|
|
|
|
Hi Guys! I'm a newbie here. I wanna match the PID in Windows Task Manager with the checksum/hash value generated by dynamic base ASLR in Visual Studio 2010? I have already enabled the ASLR in Visual Studio 2010 but no data is received. Any idea how?
<b>Clues:</b>
1. Windows functions CreateToolhelp32Snapshot
2. MODULEENTRY32
3. Windows function OpenProcess
Appreciate it very much guys.
Giggsey
|
|
|
|
|
Giggsey73 wrote: <b>Clues:</b>
1. Windows functions CreateToolhelp32Snapshot
2. MODULEENTRY32
3. Windows function OpenProcess
Are you wanting to know how to use these functions/structures?
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Yes please. I'm rushing in the middle of a project & need to use this functions? I aint got a clue.
Thanx.
|
|
|
|
|
Google was of no help? What exactly did you search for? Did you try this? Another example can be found here.
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
Sori, i need to go to sleep. Will discuss tmrow then.
Good night.
|
|
|
|
|
Hi David. With reference to yday's question,how is it possible to link process_checksum enabled by ASLR in Visual Studio 2010 to the command prompt?
Example:
c:Users\User\Documents\Visual Studio 2010\Projects\process_checksum\Debug>process_checksum.exe
Appreciate it very much.
Giggsey
|
|
|
|
|
Giggsey,
I am having trouble comprehending the question you are asking. Don't worry... I know that English is not your mother tongue. Your original question appears to be gibberish. Could you be more specific?
The problem is that the acronym 'ASLR' is security related... pertaining to randomization of DLL base addresses and stack/heap allocation randomizations to help mitigate aurora attacks (heap-spraying) and ROP shell code.
Are you asking how to enable ASLR in your project? If so... you would want to enable /DYNAMICBASE[^]
Best Wishes,
-David Delaune
|
|
|
|
|
Hi. Actually I am a novice to computing.
BTW, I got the cmd line from other sources.
c:Users\User\Documents\Visual Studio 2010\Projects\process_checksum\Debug>process_checksum.exe
By right, if u run the cmd, it will prompt u to enter PID.
Then the following data will be generated:
Name, Path, Image Base, PE Signature,...., and finally hash/checksum value which i'm so desperately looking for.
I have difficulty in finding/linking(whatever) this process_checksum. Bcoz in the end I would be able get the hash or checksum value of the file. That's all.
Many thanks.
Giggsey
|
|
|
|
|
Giggsey,
No problem. I completely understand that you are a novice and looking for guidance. It sounds to me as if you need to do quite a bit more research so that you can build a more complete understanding of these topics.
If you are looking to understand more about the PE hash algorithm then you should have a look at the article: An Analysis of the Windows PE Checksum Algorithm[^].
If you want to list the characteristics of arbitrary PE images (executable files) then have a look at the article: XPEInfo - a non-MFC class to get info from PE file[^].
I understand that you are working with a particular Visual Studio project named process_checksum. If you are having trouble compiling the application feel free to describe the exact details of the problem you are having.
I still do not understand the details of your problem. I suspect that it is because you do not know the verbiage to properly form the question.
Best Wishes,
-David Delaune
|
|
|
|
|
Hi David.
Yeah, u r right. I have problem in compiling the application especially. I had read the articles but still a bit confused.
So, what should I be doing then? Can u shed some light into this?
Appreciate it very much.
Giggsey
|
|
|
|
|
Giggsey73 wrote: Yeah, u r right. I have problem in compiling the application especially. I had read the articles but still a bit confused.
So, what should I be doing then? Can u shed some light into this?
No, I cannot help you without knowing the problem. If you are receiving a compilation or linking error then you should paste the error message here.
Best Wishes,
-David Delaune
|
|
|
|
|
I need to create a process_checksum.exe first before I can compile.
How do i go about creating it?
Regards,
Giggesy
|
|
|
|
|
Giggsey73 wrote: I need to create a process_checksum.exe first before I can compile.
<layer>How do i go about creating it?
Giggesy,
I am sorry but I can no longer help you. You continue to give paradoxical statements that are without a clear meaning.
Good luck with your project.
Best Wishes,
-David Delaune
|
|
|
|
|
Hi!
Is it possible to write a program with out main() function in C++?
If yes, Erom where the execution begins for such a program?
|
|
|
|
|
Yes, you can by using the Linker /ENTRY[^] option. However, you will not have the full C library initialised so it is your program's responsibility to set the environment correctly.
|
|
|
|