Re: Question about INT_PTR and int
Well, if you really want to be 64-bit safe, you could do something like:
int iArraySize = 0;
if (myArray.GetCount() > MAX_INT)
{
iArraySize = MAX_INT;
_ASSERTE(false && _T("Precision Warning: You are exceeding a 32-bit
value! Time to migrate your app to fully support 64-bit?"));
}
else
iArraySize = static_cast<int>(myArray.GetCount()); // I think there is
also an ::IntPtrToInt function.
for (int iRow = 0; iRow < iArraySize; i++)
{
c_List.InsertItem(iRow, [...]);
[...]
}
This way, you are only casting when it's safe. The ASSERT really can only
happen in a 64-bit build when you are truncating from an 64-bit value to a
32-bit value.
"Mikel" <mikel.luri@gmail.com> wrote in message
news:047133cf-1e98-4df7-99a6-cd4bcbf590d0@c2g2000pra.googlegroups.com...
Hi,
I have a little question regarding INT_PTR and int.
I want to show the contents of a CArray in a CListCtrl so I've done
something like:
for (INT_PTR i = 0; i < myArray.GetCount(); i++)
{
c_List.InsertItem(i, [...]);
[...]
}
The problem is I get a warning C4244 in InsertItem, because InsertItem
takes an int, so I'm converting an INT_PTR to int.
I know I could get rid of the warning by either changing the index
from INT_PTR to int or by doing an explicit cast, but both "solutions"
have their problems.
If I change the index type and at some point INT_PTR is bigger than
int, I could get and infinite loop (well, actually, the index would
wrap and become <0, so when accessing the array I would get an assert
or something).
And if I do an explicit cast, I would be in the same situation as I am
now, but without warnings.
Actually, I'm quite sure myArray won't be as big as to really have a
problem with this, and if it were, a CListCtrl would not be a good way
to show its contents. But anyway, I would like to know how to deal
with this kind of "type-mismatch". Any ideas?
Thanks
Mikel