|
Hi
I have a very odd problem that made me really crazy !
I've an member variable in my dialog class:
public:<br />
CArray < SomeStruct, SomeStruct > m_MrOdd;
In a function I added some values to m_MrOdd, like this:
void CMyDialog::SomeFunc1()<br />
{<br />
m_MrOdd.Add( SomeStruct( 1, 2 ) );<br />
m_MrOdd.Add( SomeStruct( 10, 2 ) );<br />
m_MrOdd.Add( SomeStruct( 1, 212 ) );<br />
}
And when i want to use of values, the array show me nothing !
void CMyDialog::SomeFunc2()<br />
{<br />
if(m_MrOdd.GetSize() == 0)<br />
MessageBox( _T("What did you do with my array ?!!!!!!") );<br />
.<br />
.<br />
.<br />
}
I don't know what to do ... plz help me.
The intresting part is when i debug the program
In Adding values, it shows that everything is ok and in using data in another function it shows there is not any value
Regards,
Hadi
|
|
|
|
|
Is m_MrOdd the same variable? By the way, you should be declaring it as:
CArray < SomeStruct, SomeStruct& > m_MrOdd;
(the second argument is a reference type).
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
Hi dear João
And thanks alot for reply, You are the only one who helps me
Well, m_MrOdd is the member variable (public access) of CMyDialog class.
As you said I changed the m_MrOdd declaring to:
CArray < SomeStruct, SomeStruct& > m_MrOdd;
But I've still the problem
Best Regards,
Hadi
|
|
|
|
|
Can you please show the definition of SomeStruct? It may be important...
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
It's the real structure:
struct OrderItems<br />
{<br />
OrderItems(){}<br />
OrderItems(int code, int count)<br />
{<br />
m_nCode = code; <br />
m_nCount = count;<br />
}<br />
<br />
int m_nCode;<br />
int m_nCount;<br />
};
Best Regards,
Hadi
|
|
|
|
|
This is really strange because it should be working on such a simple structure (no need for complex copy semantics). Let me think a little bit...
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
What is the value of GetUpperBound ?
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
In Adding Function (I added 2 items to array):
GetSize() is 2, and GetUpperBound() is 1
In Using Function:
GetSize() is 0, and GetUpperBound() is -1
Best Regards,
Hadi
|
|
|
|
|
Are you absolutely sure that the functions are called in this order? By any chance are you not clearing the array between the calls? (this is weired)
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
Yes, I'm sure ...
As you can see the code is so simple, and I didn't clear any item ...
Best Regards,
Hadi
|
|
|
|
|
Got it! Most of the times, we have to read MFC's source code to know whais is happening. Look:
AFX_INLINE int CArray<TYPE, ARG_TYPE>::Add(ARG_TYPE newElement)
{ int nIndex = m_nSize;
SetAtGrow(nIndex, newElement);
return nIndex; }
.
.
.
template<class TYPE, class ARG_TYPE>
void CArray<TYPE, ARG_TYPE>::SetAtGrow(int nIndex, ARG_TYPE newElement)
{
ASSERT_VALID(this);
ASSERT(nIndex >= 0);
if (nIndex >= m_nSize)
SetSize(nIndex+1, -1);
m_pData[nIndex] = newElement;
}
The code is using a reference type (ARG_TYPE ) to add the objects, that you are passing as unnamed temporaries (when are these being deleted?). Try something like this:
void CMyDialog::SomeFunc1()
{
SomeStruct a(0,0);
a = SomeStruct( 1, 2 );
m_MrOdd.Add( a );
a = SomeStruct( 10, 2 );
m_MrOdd.Add( a );
a = SomeStruct( 1, 212 );
m_MrOdd.Add( a );
}
I know it looks odd, but try it.
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
I tried this way:
OrderItems item(0, 0);<br />
item = OrderItems( 10, 96 );<br />
m_OrderItems.Add( item );<br />
item = OrderItems( 5, 13 );<br />
m_OrderItems.Add( item );
But ......
Regards,
Hadi
|
|
|
|
|
Man, this is maddening! What SDK are you using?
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
Yes I know but what can i say ?
I'm using eVC++ 4.0 SP3, PPC 2003 SDK, WinCE 4.2 SDK is also installed.
PS: I just stop the project, don't know what the hell is this
Anyway thanks alot for your time
Regards,
Hadi
|
|
|
|
|
I forgot to say that i got thease warnings in compiling:
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\afxtempl.h(65) : warning C4291: 'void *__cdecl operator new(unsigned int,void *)' : no matching operator delete found; memory will not be freed if initialization throws an exception<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\wcealt.h(235) : see declaration of 'new'<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\afxtempl.h(334) : see reference to function template instantiation 'void __cdecl ConstructElements(class OrderItems *,int)' being compiled<br />
OrderListDialog.cpp<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\afxtempl.h(65) : warning C4291: 'void *__cdecl operator new(unsigned int,void *)' : no matching operator delete found; memory will not be freed if initialization throws an exception<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\wcealt.h(235) : see declaration of 'new'<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\afxtempl.h(334) : see reference to function template instantiation 'void __cdecl ConstructElements(class OrderItems *,int)' being compiled<br />
ReportPage.cpp<br />
ShamsiDate.cpp<br />
Visitor.cpp<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\afxtempl.h(65) : warning C4291: 'void *__cdecl operator new(unsigned int,void *)' : no matching operator delete found; memory will not be freed if initialization throws an exception<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\wcealt.h(235) : see declaration of 'new'<br />
e:\windows ce tools\wce420\pocket pc 2003\mfc\include\afxtempl.h(334) : see reference to function template instantiation 'void __cdecl ConstructElements(class OrderItems *,int)' being compiled<br />
Generating Code...<br />
Linking...
|
|
|
|
|
This may well be the source of this problem. To diagnose it, I would have to take a look at your entire project.
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
Here's the story:
class OrderItems<br />
{<br />
public:<br />
OrderItems(){}<br />
OrderItems(int code, int count)<br />
{<br />
m_nCode = code; <br />
m_nCount = count;<br />
}<br />
<br />
int m_nCode;<br />
int m_nCount;<br />
};<br />
<br />
class CMainPage : public CPropertyPage<br />
{<br />
.<br />
.<br />
.<br />
void UseOrders();
<br />
public:<br />
CArray < OrderItems, OrderItems& > m_OrderItems;<br />
}
And somewhere, in one of CMainPage methods I show another dialog and i add the items in that:
void COrderListDialog::OnOK() <br />
{<br />
CMainPage* dlgMain = (CMainPage*) GetParent();<br />
<br />
OrderItems item(0, 0);<br />
item = OrderItems( 10, 96 );<br />
dlgMain->m_OrderItems.Add( item );<br />
item = OrderItems( 5, 13 );<br />
dlgMain->m_OrderItems.Add( item );<br />
<br />
CDialog::OnOK();<br />
}
And then when i back to Main form i call UseOrders() to read the items but the problem occrues
I hope it's clear ...
Regards,
Hadi
|
|
|
|
|
Please make sure that this:
CMainPage* dlgMain = (CMainPage*) GetParent();
does return the pointer you want. If not, all is explained...
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
Yessss, That's it
You solved the problem ! Thank you very much !
I changed code to this:
CAppSheet *pAppSheet = (CAppSheet *) GetParent();<br />
CMainPage *dlgMain = (CMainPage *) pAppSheet->GetPage(0);
And now it works fine ...
Best Regards,
Hadi
|
|
|
|
|
I did some new tests on the code that the results are strange too.
1- I declared m_OrderItems as a pointer variable and then use new, when i want to add items it shows me an error: "Out Of Memory.", But the program doesn't crash.
2- I used vector instead of CArray and i get same result. (No Item !)
Regards,
Hadi
|
|
|
|
|
Hey all, I'm working with a Phillips LPC2129 chip using a Keil compiler. In viewing the example code supplied by Keil, I noticed that they returned an 'int' from a call to a function sending a char out a UART configured as ab RS232 port.
To write to the UART the following is requiredL U1THR = <the char="" to="" be="" written="">.
The problem I have is that in the sample code provided by Keil they return that value in the 'putchar' call and I have no clue how to determine the value of the return. Moreover the manner in which a byte is written to the UART is a register write, not a function call. For example:
return( U1THR = ch );
where ch is the char to be sent. Regardless of what value ch = the return value is 'H' (0x48). I reckon my question lies in how to determine the return value of an assignment?
-any got any input on this?
---------------------------------------------
Help... I'm embedded and I can't get out!
It's amazine how simeple life can be when one get's his head out of his ass...embly
If they don't get the basic research and learning skills down then they'll end up having a very hard life (Either that or they'll become managers) - Micheal P Butler
|
|
|
|
|
is there any free IDE for the .net compact framework?
|
|
|
|
|
Hi,
I'm developing an application using vb.net for PDA's. How should i store the data in the pocket PC access db. .NET CF does not have classes to support this.
|
|
|
|
|
Check out InTheHand's website[^].
Regards,
João Paulo Figueira
Embedded MVP
|
|
|
|
|
HI
I would like to add AfterCollapse handler to the treeView object using compact framework. However, it seems that CF does not support aftercollaspse event handle. Is there any other ways to add this event handler?
Thanks~
|
|
|
|