|
How do I extract a gob of class information to an array? For example say I have a class:
class Box
{
int Right;
int Left;
int Bottom;
};
Let's say it's 96bytes in Size. There is another function that returns the class but it is now 480bytes in size. From that and doing calculations there is 5 objects of that size that was returned. How do I assign that information into an array? Or, what is the best way to extract each piece of the class?
Thanks
HomeNuke
----
"Nuke'd Your Home, Yet?"
Run your own PostNuke based web server from home
http://www.homenuke.com
|
|
|
|
|
Tip: always name your classes C*
class CBox
{
int Right;
int Left;
int Bottom;
};
int nSize;
CBox *p_BoxArray = (CBox *) SomeFunc(&nSize);
int NumberOfObjectsInArray = nSize / sizeof(CBox);
for (int i=0; i < NumberOfObjectsInArray ; i++)
{
cout << p_BoxArray[i]->Right << "\n";
}
why does this work? well, you can use a pointer as if it were an array (there isn't really any difference between them, in fact.). Logically speaking, incrememnting a pointer does not make it point to that memory address + 1 byte, it makes it point to that memory address + (the size of whatever object it points to).
Sorry to dissapoint you all with my lack of a witty or poignant signature.
|
|
|
|
|
Jon,
Thanks for your answer! It is exactly what I needed to point me in the right direction. Well, your answer practically kicked me in the right direction because it was so detailed.
Thanks Again.
Also did some further thought wouldn't this returned memory also be defined as an array of the object? Shouldn't we be able to access the returned information as an array? Or, is an array defined internally as something different or different flags are set in the memory space that an array occupies? Just questions...
HomeNuke
----
"Nuke'd Your Home, Yet?"
Run your own PostNuke based web server from home
http://www.homenuke.com
|
|
|
|
|
Does anyone have an idea of how to hook the keyboard under Windows 98? I have to catch the character, send to ANY application running? Maybe win32 hook is the right solution, but on what application to install it???
"Needless redundancy is the hobgoblin of software engineering." - Peter Darnell
|
|
|
|
|
As far as I know there are two ways to do this:
1) Set a Journal Record Hook (use SetWindowsHookEx with WH_JOURNALRECORD )
2) Use AttachThreadInput directly (will probably lock up your computer sooner or later and create a forehead-shaped bump in your desk)
Anyway, more than keystrokes are recieved from the RIT, and you need to sort them out from other hardware messages.
/moliate
|
|
|
|
|
You can use this:
http://www.codeproject.com/dll/keyboardhook.asp
|
|
|
|
|
Is there anyway Update EXE/Dll Resources on Win9x? The Update Resources API only work on NT. Anyone know if I can do this on Win9x?
Thank you.
Real World Coding:
POP& BuyAPop(Money ADollar){...};
|
|
|
|
|
There is a way. Erik Kallen wrote a superb library that you can find in his CodeGuru article Updating Resources on Win9x.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Thank you I thought I saw this but I only checked back at CP.
Real World Coding:
POP& BuyAPop(Money ADollar){...};
|
|
|
|
|
I been try the code out and when I add it to my test project I get MFC CMap compile errors
Real World Coding:
POP& BuyAPop(Money ADollar){...};
|
|
|
|
|
Hi
I'm currently developing a dialog-based app.
Everything worked fine until some minutes ago.
Now I compiled my app once more, and suddenly it crashes during startup...the dialog isn't even shown
Here's the part of code where my app seems to crash (it's MFC internal code as you can see):
int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
ASSERT(hPrevInstance == NULL);
int nReturnCode = -1;
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();
if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
goto InitFailure;
if (pApp != NULL && !pApp->InitApplication())
goto InitFailure;
if (!pThread->InitInstance())
{
if (pThread->m_pMainWnd != NULL)
{
TRACE0("Warning: Destroying non-NULL m_pMainWnd\n");
pThread->m_pMainWnd->DestroyWindow(); <---------------------------- here it happens
}
nReturnCode = pThread->ExitInstance();
goto InitFailure;
}
nReturnCode = pThread->Run();
Any help is greatly appreciated
regards
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Can you pinpoint the line on which the crash occurs? If not, do you get an assertion dialog box when running your program in the Debug build?
|
|
|
|
|
I don't get a debug assertion window.
I both debug and release build the typical "crash-windows" appears, when an app crashes.
But there's one more thing that's definately not normal:
BOOL CScriptEditorApp::InitInstance()
{
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
CScriptEditorDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
return FALSE;
}
I ran this in debug mode with a breakpoint in line "CScriptEditorDlg dlg;"
Then I went on with program execution.
The strange thing is, that the cursor jumps from line
int nResponse = dlg.DoModal();
directly to
return FALSE;
and thus the dialog box never appears
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Try deleting the Debug and Release directories as well as the .pch (precompiled header) files, then try rebuilding all. Sometimes this makes wonders.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
Joaquín M López Muñoz wrote:
Sometimes this makes wonders
Not im my case
This drives me crazy
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Put a breakpoint in your dialog's OnInitDialog. You may be referencing a bad CWnd. In any case, the stepping thru OnInitDialog() should reveal the problem. Do a clean rebuild before you do this. This will fix any resource id errors that may have crept in.
/ravi
"There is always one more bug..."
ravib@ravib.com
http://www.ravib.com
|
|
|
|
|
OnInitDialog doesn't get called..the app crashes earlier on startup, I just checked it once more
modified 12-Sep-18 21:01pm.
|
|
|
|
|
Make sure you don't try to intialize any control within the Dlg class constructor. Maybe that is your problem.
|
|
|
|
|
Is this what you mean?
CScriptEditorDlg::CScriptEditorDlg(CWnd* pParent )
: CDialog(CScriptEditorDlg::IDD, pParent)
{
m_pToolTip = NULL;
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
modified 12-Sep-18 21:01pm.
|
|
|
|
|
OK,
I finally found the (very studpid) reason for the crash:
A menu was assinged to the dialog template, but for some reason I deleted the menu resource by accident
Kinda good feeling that my app runs correct now
modified 12-Sep-18 21:01pm.
|
|
|
|
|
I have an application that handles the LVN_GETDISPINFO notification from a view ClistViewCtrl. The listview contents is in an array so I just call m_view.SetItemCountEx( m_Count, 0 ); to tell the listview how many rows I have and then handle all the icons and text when the listview sends a LVN_GETDISPINFO notification.
I wanted to go further and also store the state information in my array as well so the LVN_SETDISPINFO would be a great help there.
When I add the LVN_SETDISPINFO and LVN_ODSTATECHANGED notifications they never come up in the message map of the mainfram window. Is there anyone that knows why this is or have any tips on how to get information on how it should be done to make it work?
All input will be very appreciated.
I put some trace code in the message map but there is nothing about either the ANSI or UNICODE notification showing up. No message comes up in Spy++ either. There is probably something missing but I can not figure out what. I have not seen a working example of the LVN_SETDISPINFO so I have no reference.
When I try m_view.SetCallbackMask( LVIS_FOCUSED ); It seams to understand this because the focus has disappeared from the list, and if I also add the LVIS_SELECTED the selections also disappears unless I set the state my self in LVN_GETDISPINFO.
I have followed this group, searched the internet and been to MSDN and read in the help for CListViewCtrl, the only thing I found was about WM_NOTIFYFORMAT that I also put in.
Below is excerpts from the source.
Thanks in advance
Ulf
In the _tWinMain:
iccx.dwSize = sizeof(iccx);
iccx.dwICC = ICC_WIN95_CLASSES;
//iccx.dwICC = ICC_COOL_CLASSES | ICC_BAR_CLASSES | ICC_LISTVIEW_CLASSES;
BOOL bRet = ::InitCommonControlsEx(&iccx);
The definition of the ClistViewCtrl as follows:
typedef CWinTraits<ws_child |="" ws_visible="" ws_clipsiblings="" ws_clipchildren="" |ws_vscroll="" lvs_report="" lvs_showselalways="" lvs_singlesel="" lvs_shareimagelists="" |lvs_ownerdata,="" ws_ex_clientedge=""> LexinUpdateTraits;
class CLexinUpdateView : public CWindowImpl<clexinupdateview, clistviewctrl,="" lexinupdatetraits="">, public CCustomDraw<clexinupdateview>
{
public:
DECLARE_WND_SUPERCLASS(NULL, ListViewCtrl::GetWndClassName())
typedef CWindowImpl<clexinupdateview, clistviewctrl=""> winbaseClass;
BEGIN_MSG_MAP(CLexinUpdateView)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
NOTIFY_CODE_HANDLER(HDN_ITEMCLICKA, OnHeaderClicked)
NOTIFY_CODE_HANDLER(HDN_ITEMCLICKW, OnHeaderClicked)
//CHAIN_MSG_MAP(winbaseClass)
END_MSG_MAP()
BOOL PreTranslateMessage(MSG* pMsg)
{
pMsg;
return FALSE;
}
The definition of the mainframe is as follows:
class CMainFrame : public CFrameWindowImpl<cmainframe>,public CUpdateUI<cmainframe>, public CMessageFilter, public CIdleHandler
{
public:
DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
typedef CFrameWindowImpl<cmainframe> winbaseClass;
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
if(CFrameWindowImpl<cmainframe>::PreTranslateMessage(pMsg))
return TRUE;
return m_view.PreTranslateMessage(pMsg);
}
public:
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_NOTIFYFORMAT, OnNotifyFormat)
NOTIFY_HANDLER(IDC_LISTVIEW,LVN_SETDISPINFO,OnSetdispinfoLexinview)
NOTIFY_HANDLER(IDC_LISTVIEW,LVN_GETDISPINFO,OnGetdispinfoLexinview)
NOTIFY_HANDLER(IDC_LISTVIEW,LVN_ODSTATECHANGED,OnODStateChangedLexinview)
CHAIN_MSG_MAP(CUpdateUI<cmainframe>)
CHAIN_MSG_MAP(winbaseClass)
END_MSG_MAP()
// Message handlers
LRESULT OnCreate( UINT, WPARAM, LPARAM, BOOL& );
LRESULT OnClose( UINT, WPARAM, LPARAM, BOOL& );
LRESULT OnNotifyFormat( UINT, WPARAM, LPARAM, BOOL& );
LRESULT OnSetdispinfoLexinview(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnGetdispinfoLexinview(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnODStateChangedLexinview(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
The list view is initialised as follows in the mainframe OnCreate():
m_hWndClient = m_view.Create(m_hWnd, rcDefault, NULL, 0, 0, IDC_LISTVIEW);
ATLASSERT(::IsWindow(m_hWndClient));
// Style must be set for edit labels and ownerdraw
m_view.SetExtendedListViewStyle( LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_INFOTIP );
m_view.InitImageList( IDB_LIST_STATES );
//m_view.SetCallbackMask( LVIS_FOCUSED|LVIS_SELECTED );
m_view.SetCallbackMask( LVIS_FOCUSED );
|
|
|
|
|
Hey Folks,
When doing a "malloc" what causes it to return NULL?
I have a customer who is using our product and the application fails because it is unable to create a buffer. This application ( a propritary db server ), uses quite a bit of memory (maybe 20-30 meg at a time)...
As a test, I wrote a simple while loop to see what it would take for "malloc" to fail.... I made near 800 calls to malloc ( 1meg ) before I got a NULL ptr.
What are some of the limits of memory an application can use considering virutal memory/paging etc..
Is there a function call I can use to see EXACTLY how much memory a process is using? (would implement this in the code to see if MAYBE we have a leak).
Any thoughts?
Mike
doner@obtain.com
|
|
|
|
|
When doing a "malloc" what causes it to return NULL?
The reason for malloc to return NULL is of course that the memory request could not be fulfilled. That can be caused by:- Having consumed so much memory that too little remains available,
- requesting an exceedingly large amount of memory (
nSize being too large), - the memory being too fragmented to allocate a contiguous chukn of memory the size requested, which could happen if your program does massive allocations/deallocations of chunks of various sizes and runs for a sufficiently long time.
What are some of the limits of memory an application can use considering virutal memory/paging etc..
The maximum amount of addressable virtual memory is 2GB (subtract some memory consumed by C run-time library and so). That means the maximum memory a process can ever expect to be able to allocate. When it comes to reality, the total amount available depends on the size of the swap file --your 800MB limit seems reasonable.
Is there a function call I can use to see EXACTLY how much memory a process is using? (would implement this in the code to see if MAYBE we have a leak).
GlobalMemoryStatus. Regards,
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
To accomplish smooth, fast graphics that don't flicker which is better, double buffering or private DC's?
Mark Lenz
|
|
|
|
|
I'm having a problem where it looks like I'm running out of device contexts. I have a control which looks kinda like a fuel guage. The value that the needle represents is updated about every second, so the needle must be redrawn about every second. I have about 4 or 5 of these controls in my view. When I have been displaying the view for about 3 minutes, things start to get weird. All of my fonts revert to a standard font and it starts to draw white where there was supposed to another color. This starts to affect the title bar, making it white. Sometimes it even starts to affect other applications.
Does anyone know what's happening and maybe what I could do to stop this?
I have looked everywhere, Google, MSDN, MSJ and mailing list archives, but I don't really know what's going on so I don't really know what to look for.
Thanks.
Mark Lenz
|
|
|
|
|