|
Well, one thing that instantly comes to my mind, is that buffer byte sizes, that were previously calculated using std::string::size , must now be calculated using std::wstring::size * sizeof(wchar_t) :
const std::string s1("non unicode");
const std::wstring s2("unicode");
const size_t bytesize1 = s1.size() * sizeof(char);
const size_t bytesize2 = s2.size() * sizeof(wchar_t); and, of course, bytesize1 != bytesize2 .
This in combination with memcpy , memset , etc. is a common trap when changing to unicode.
--
The Blog: Bits and Pieces
|
|
|
|
|
If your code always used the underlying string type's value_type , you would be always able to determine per-element size (and thus any buffer size requirements) correctly - there is no requirement that basic_string only contain narrow or wide char acter types:
typedef std::basic_string< int > IntStr;
int iValue = 1024;
IntStr isInt( &iValue );
const std::wstring s2( L"unicode" );
const std::string s1( "non unicode" );
const size_t stByteSize1 = s1.size() * sizeof( std::string::value_type );
const size_t stByteSize2 = s2.size() * sizeof( std::wstring::value_type );
const size_t stByteSize3 = isInt.size() * sizeof( IntStr::value_type ); Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Tip for new SUV drivers: Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
Thanks Johann and James. I look for size calculation errors tonight, I beleive that may be part of the problem. As for memory functions, I am not using them currently (i'll double check though).
Thanks
|
|
|
|
|
I answered nitpickingly correct at first, but decided that it would be easier to read the answer if I used char /wchar_t and size_t , because your
const size_t stByteSize1 = s1.size() * sizeof(std::string::value_type);
const size_t stByteSize2 = s2.size() * sizeof(std::wstring::value_type); is only half correct:
const std::string::size_type stByteSize1 = s1.size() * sizeof(std::string::value_type);
const std::wstring::size_type stByteSize2 = s2.size() * sizeof(std::wstring::value_type); is correct. And now it's easy to see, for the sake of this exercise, that char /wchar_t and size_t makes reading and understanding easier. But still not correct.
James R. Twine wrote: typedef std::basic_string< int > IntStr;
Ohhh... dangerous! Using that correctly to get expected results, means that you probably also need to have a char_traits specialization for int to get where you want.
--
The Blog: Bits and Pieces
|
|
|
|
|
You are correct about needing to use the class' size_type type to get the correct variable type.
The example I gave for using a string class for int types was contrived - I just wanted to demonstrate the use of value_type . But you are correct there as well - more would need to be done to make a completely usable IntStr type.
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Tip for new SUV drivers: Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
I have an Intenet Explorer toolbar and I want to display a bitmap on it. I used the button separator to make room for the control in the toolbar and I can display text in the CStatic, but when I try to display an image the whole CStatic is painted with a single color. I think it is the first pixel color of the bmp.
I use the following code:
//in the header file:
<br />
CStatic anonTitle;<br />
//in the cpp file
<br />
anonTitle.Create("",WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE, rcTitle,this));<br />
<br />
CBitmap anonPic;<br />
anonPic.LoadBitmap(IDB_BITMAP3);<br />
anonTitle.SetBitmap((HBITMAP)anonPic.m_hObject);<br />
anonPic.Detach();<br />
If I use the code from a MFC application it works. But in the toolbar the whole static is painted with only one color.
I have also tried with :
<br />
anonTitle.Create("",WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE, rcTitle,this));<br />
anonTitle.SetBitmap( ::LoadBitmap(AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP3)));<br />
and
<br />
CString str;<br />
str.Format(_T("#%d"), IDB_BITMAP3); <br />
anonTitle.Create(str,WS_CHILD | WS_VISIBLE | SS_BITMAP | SS_CENTERIMAGE, rcTitle,this));<br />
and still same result.
Desperate help needed.
Best regards,
Mircea
Many people spend their life going to sleep when they’re not sleepy and waking up while they still are.
|
|
|
|
|
ok managed to solve it - by mistake of course.
aparently if you remove the SS_CENTERIMAGE style it all works fine.
I gues there are some things I will never coprehend.
Many people spend their life going to sleep when they’re not sleepy and waking up while they still are.
|
|
|
|
|
I am using the following code to allocate dynamic double dimensional array
double **ImagePro;
try
{
ImagePro = new double*[width];
for(int i = 0; i < height; i++)
{
ImagePro[i] = new double[width];
}
}
catch(CMemoryException* ex)
{
ImagePro = NULL;
ex->ReportError();
return FALSE;
}
and for deletion
for(int i = 0; i < height; i++)
{
delete ImagePro[i];
}
delete ImagePro;
return TRUE;
My problem is whenever the height is greater than width I get assertion error message
Pls Help
|
|
|
|
|
Hello.
Try changing:
ImagePro = new double*[width];
to
ImagePro = new double*[height];
|
|
|
|
|
Did you try this ?
for(int i = 0; i < height; i++)<br />
{<br />
delete[] ImagePro[i];<br />
}<br />
delete[] ImagePro;
And wich part of the code is asserting ?
|
|
|
|
|
delete[] ImagePro is not working
I get assertion in "delete ImagePro;"
|
|
|
|
|
You should, since
delete ImagePro[0];
Is the same as
delete ImagePro;
So when you the delete ImagePro, its already deleted.
|
|
|
|
|
It works fine when the height and width are equal or if the height is less than width
The error occurs only when the height is greater than the width.
BoundsChecker displays an error message "Dynamic memory overrun"
|
|
|
|
|
Hello.
See my earlier post. You allocate <width> no of items twice.
You don't use <height>, except in the allocating loop.
Since you allocate room for <width> items in your table.
So it's natural that you go out of bounds if height is bigger than what you allocated (which is <height> items).
Kakan
|
|
|
|
|
so how should I allocate and delete dynamic memory when the width and height are different.
help me with some code.
|
|
|
|
|
Sorry, I'm at work and have work to do.
But there is HEAPS of source code for dynamic 2-dimensional arrays out there.
Serach at CodeProject and/or Google.
I think you need to find a working example to start with.
Good luck.
Kakan.
|
|
|
|
|
Hello again. I couldn't let go of your problem.
I found a lot of suggestions at experts exhange, at:
http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_21442835.html[^]
This example looks interesting, and complete:
<br />
template < typename T ><br />
T **Allocate2DArray( int nRows, int nCols)<br />
{<br />
T **ppi;<br />
T *pool;<br />
T *curPtr;<br />
<br />
ppi = new T*[nRows];<br />
<br />
pool = new T [nRows * nCols];<br />
<br />
curPtr = pool;<br />
for( int i = 0; i < nRows; i++)<br />
{<br />
*(ppi + i) = curPtr;<br />
curPtr += nCols;<br />
}<br />
return ppi;<br />
}<br />
<br />
template < typename T ><br />
void Free2DArray(T** Array)<br />
{<br />
delete [] *Array;<br />
delete [] Array;<br />
}<br />
<br />
int main()<br />
{<br />
double **d = Allocate2DArray<double>(10000, 10000);<br />
d[0][0] = 10.0;<br />
d[1][1] = 20.0;<br />
d[9999][9999] = 2345.09;<br />
Free2DArray(d);<br />
}<br />
In the main function, you can see how to use the array.
I think you should try it out.
Regards
Kakan
|
|
|
|
|
Arrun wrote: ImagePro = new double*[width];
for(int i = 0; i < height; i++)
If you allocate room for width double pointers, it only makes sense that the for loop execute only that many times. If height happens to be larger than width , an error should be expected. See here for an example.
Arrun wrote: for(int i = 0; i < height; i++)
{
delete ImagePro[i];
}
delete ImagePro;
Change to:
for(int i = 0; i < height; i++)
delete [] ImagePro[i];
delete [] ImagePro;
"Take only what you need and leave the land as you found it." - Native American Proverb
|
|
|
|
|
When I try to insert line numbers into my CRichEditView application, it only displays numbers upto 255. When the document has more than 255 lines, number 255 get repeated.
Can anybody let me know how to fix this?
Here's my code
PARAFORMAT2 pf = GetParaFormatSelection();
pf.cbSize = sizeof(pf);
pf.dwMask = PFM_NUMBERING | PFM_STARTINDENT | PFM_NUMBERINGSTART | PFM_NUMBERINGSTYLE;
pf.wNumbering = 2;
pf.wNumberingStart = 1;
pf.wNumberingStyle = 0x200;
pf.dxStartIndent = 10;
SetParaFormat(pf);
It's like this, if i start numbering with 100 it is repeating after 354. Number range is limited to 255 numbers. Can we set the number range in PARAFORMAT2 structure?
Thanks
|
|
|
|
|
The problem is that you are using something for which it was not designed.
The Numbering feature of the Rich Edit controls is not to be used for showing line numbers like how a fancy text editor does in its margin, it is used to format a paragraph into a numbered (or bulleted) list.
My guess is that the 255 item limit is due to the design of the feature.
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Tip for new SUV drivers: Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
Is that so
Then how can I display line numbers in my document? My view class is derived from CRichEditView.
Any suggestions?
Thanks for da reply
sandakith
|
|
|
|
|
There are a few ways to do it. First, you could manually draw line numbers into the selection margin (or a shorten the width of the control). If you are dealing with a read-only document (read-only as far as the user is concerned), you could manually insert line numbers before the document is rendered.
Or you could use a control like Scintilla or the "Crystal editor", which both support line numbers natively, I believe. Projects/Articles exist that demonstrate both, I believe (search for 'em).
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Tip for new SUV drivers: Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
default protocol of web-site is http://
are there other protocols for web-files?
if yes, could you give me an sample and a link (web address which does not start with http://)
thx
includeh10
|
|
|
|
|
includeh10 wrote: default protocol of web-site is http://
are there other protocols for web-files?
Yes Default protocol is HTTP:// but you can also use https:// to access file tooo
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
includeh10 wrote: if yes, could you give me an sample and a link (web address which does not start with http://)
Gopher or FTP
Developed at the UofM (University of Minnesota) it as memory serves predates (slightly) http. The last (UofM) gopher website was taken down about a year ago.
Wiki link
Gopher_protocol[^]
There are a few other protocals but http dominates.
DEBUGGING : Removing the needles from the haystack.
-- modified at 6:09 Wednesday 9th November, 2005
|
|
|
|