|
I can predict the next posting... "I ran your code and it never reached infinity what could the problem be?"
Why is common sense not common?
Never argue with an idiot. They will drag you down to their level where they are an expert.
Sometimes it takes a lot of work to be lazy
Please stand in front of my pistol, smile and wait for the flash - JSOP 2012
|
|
|
|
|
|
Hi,
I have a question about information provided by the exception handler
My Background is on the MainFrame there Z/OS MVS via RTM (Recovery Termination Manager)
provides information about the abend in a COntrol block SWDA (System Diagnotic Area)
The Recovery Routine (ESTAE,ARR,FRR) provides the abilty to do a retry of the Aborted
Task
Does the FRameWork (AFX) provide anything besides a catch routine for the code that is
problematic
Thanks
|
|
|
|
|
What exactly is your issue in terms of C/C++/MFC? What frame work are you talking about?
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
you code a Catch pargraph and an excpetion happens somewhere in your THREAD the catch block is executed but you really don't know where in your code it happened
Thanks
|
|
|
|
|
I know how to code a catch block, I was just wondering whether you had posted in the correct forum. When you catch the exception it should contain sufficient information for you to discover what went wrong in your code.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
// don't know where in your code it happened
Let your debugger stop at any exception
(IDE::Ctrl+Alt+E in a loaded solution)
They sought it with thimbles, they sought it with care;
They pursued it with forks and hope;
They threatened its life with a railway-share;
They charmed it with smiles and soap.
|
|
|
|
|
To my knowledge, MFC does not contain tools for managing task transactions. There is no common framework for managing undos, redos, etc...
The try / catch mechanism is a simplistic implementation of such a system, built into C++ that allows a program to gracefully unwind from an aborted task. the Afx classes that support exception handling, simply build upon this framework.
I have seen articles that discuss transaction processing for the windows file system and other kernel elements, coming up in future releases, but at this time, I don't know much about it.
You'll likely find that you'll need to roll your own Transactional Tasks manager for your application.
|
|
|
|
|
Folks Quick Question:
I have a dll developed in c#, which does some interactions with a web service, this all seems to be fine. I have made the dll visible to COM. I then register the dll using regasm passing it a /codebase /tlb argument. Again all this works fine. I now get a tlb file. From here i reference the tlb in my VC6 project like so:
#import "C:\\epos\\MyInterface.tlb" raw_interfaces_only
using namespace MyInterface;
Once i compile the VC++ project i get a tlh file generated, which has the following contents (edited there is much more in this file just showing what is needed here):
.tlh File generated by VC6
#pragma once
#pragma pack(push, 8)
#include <comdef.h>
namespace MyInterface {
>struct __declspec(uuid("2172ffe3-3177-3e81-ac7a-9d27e11be389"))
IMyLink;
struct CMyLink;
_COM_SMARTPTR_TYPEDEF(IMyLink, __uuidof(IMyLink));
I create COM earlier in the program so i have not included it in the code below.
Then i Create an instance of the c# class, to call the methods i need. Now this all works fine and i can call these methods and they work correctly.
Code in my Main.c file
IMyLinkPtr iPtrMyLink; IChVRspPtr iPtrCheckVRsp;
void main()
{
short blnRetVal = 0;
IChVReqPtr iPtrCheckV(__uuidof(CChVReq));
HRESULT hrRetval= E_FAIL;
hrRetval = iPtrMyLink.CreateInstance(__uuidof(CMyLink));
iPtrMyLink->CallMethod1(iPtrCheckV, &iPtrCheckVRsp, &blnRetVal);
}
The problem i am having is that my program crashes after some time where the memory has grown to 32mb, which to me is quite low. The crash occurs on a CreateInstance line, not necessarily the one above but some other method i have to another .net dll. My main question is about memory, before calling this line:
hrRetval = iPtrMyLink.CreateInstance(__uuidof(CMyLink));
The memory in the VC6 app is 12mb, once this line is called the memory jumps to 24mb. Is this down to loading the .net Framework and if i have another dll that does the same the memory will jump to 32mb and will crash shortly after when attempting to create an instance again. I am releasing the objects so im not sure what is going on here.
Any ideas appreciated?
|
|
|
|
|
|
OK, this is a bit of a long shot, but any help would be appreciated...
I have a CWnd that contains a CHeaderCtrl and CTreeCtrl within a CDialog within a CScrollView within a CSplitterWnd within a CControlBar.
All works very well except the CWnd border (ClientEdge) is not redrawn (just seems to leave whatever was underneath) when splitter bar is moved, and CWnd is resized and invalidated. However, the edges ARE redrawn properly when the whole app is resized which also resizes panes in CSplitterWnd and subsequently CWnd in excatly same way as above. In other words, both scenarios call CSplitterWnd::RecalcLayout() which trickles down and drives all resizing of child view/dialog/window/tree control. The only difference I can really see is that one was generated by resizing whole app, while other was generated by StopTracking() of the CSplitterWnd. All other controls (buttons, group boxes, etc. resize and redraw fine).
The CWnd is created as such...
CreateEx(WS_EX_CLIENTEDGE, NULL, NULL, WS_CHILD | WS_VISIBLE |
WS_TABSTOP, rcTreeWnd, pDlg, IDC_TREE);
A lot of web crawling suggests perhaps that it's something to do with being on a CControlBar which may result in some notify commands not getting to all children? But
I've tried trapping the paint messages, but am a bit confused as OnPaint seems to be being called...I'm now assuming that the window border isn't actually drawn by OnPaint? If it's not, where is it drawn and by whom?
Just playing around with painting in OnEraseBkgnd, I've noticed something very strange...if I get client rect and paint the background red, in the case where it's not repainting correctly, only an area at either end of the scroll bars to the right of the tree control are being painted red, where as in the case where it is working, the whole control is being painted red - the client rects are always same size.
Invalidating the CWnd doesn't fix the problem. Calling InvalidateRect(NULL) invalidates the whole screen which does fix the repainting, but is not a viable solution as there are graphs on the other bits of the screen that can take several seconds to redraw and shouldn't be redrawn any time the splitter bars are moved.
Anyone ever seen anything like this? I'm extremely confused and any pointers as to things to try would be much appreciated.
BTW - dialog in view in splitter wnd in ccontrol bar is part of a function panel down one side of the app.
Many thanks,
Phil.
"He is no fool who gives what he cannot keep to gain that which he cannot lose.
|
|
|
|
|
OK, while I've no idea why this happens, I've found a solution.
I've read up that OnNcPaint handles the borders (NC being Non-Client area). And it's this WM_NCPAINT message that never arrives in the situation where the border isn't painted. While I've no idea why this message isn't sent, sending a WM_NCPAINT message to the control after it's been resized ensures the frame is always repainted. Success!
"He is no fool who gives what he cannot keep to gain that which he cannot lose."
|
|
|
|
|
Hi,
Enumprocessmodule fails when i am trying to get the currently running module file path.
|
|
|
|
|
The get the path to the .exe file that was launched to create the current process use GetModuleFileName() with a NULL module handle.
|
|
|
|
|
Per MSDN:
If the function fails, the return value is zero. To get extended error information, call GetLastError() .
"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
|
|
|
|
|
Maybe it's a problem of insufficient access rights. Try it with the local administrative account , or as elevated process in Vista , Win 7 to be sure it is a "permissions issue".
|
|
|
|
|
hi all,
using below example i calculate the hour and minute value,
please help me to calculate second value here.
WORD time =23929;
WORD hour, minute , second;
hour = time >> 11;
minute = time << 5 ;
minute = minute >> 10;
thanks.
|
|
|
|
|
That looks weird, what kind of time format do you use in your time variable?
|
|
|
|
|
time have hex type of values.
|
|
|
|
|
LOL so you are using bit ranges inside the integer? I would rather use Unix time to store the current time, if you use UTC that helps you to handle time zones too.
|
|
|
|
|
I assume it is the format used by the FAT file system due to the 2 seconds resolution.
|
|
|
|
|
|
This does not make a lot of sense but at a guess the bottom five bits of the number are supposed to represent the seconds, although that allows for a maximum of only 31 seconds. You will also get invalid values for minutes as you do not mask out the hour value. Perhaps you could explain where these values, and the shift constants, are derived from.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
WORD time = 23929;
WORD hour = time >> 11;
WORD minute = (time >> 5) & 0x3f
WORD seconds = time & 0x1f;
WORD time2 = seconds | (minute << 5) | (hour << 11);
|
|
|
|
|
You can create a struct or union to define the bit assignments:
typedef union _MyTime_t {
WORD tm;
struct {
unsigned sec : 5; unsigned min : 6;
unsigned hour : 5;
} bits;
} MyTime_t;
MyTime_t tm;
tm.tm = 23939;
printf("%02u:%02u:%02u\n", tm.bits.hour, tm.bits.min, tm.bits.sec * 2);
|
|
|
|