At 12.36 06/02/2004 +0100, Chaudhuri, Hiran wrote:
Hi, Lei.

Having followed this thread, a question arises for me.
I am in a similar situation with an application that keeps its configuration in an XML file. This file is also intended to contain localized messages. I thought that to be a good idea as XML should handle Unicode, and of course I'd compile my VC++ appication with Unicode, expecting CString to work on 16 bit characters (or whatever appropriate) to support Japanese messages.


Now how do I have to use the unicode CString with Xerces? Is there a suitable XMLString::transcode method?

When the CString is used with _UNICODE defined, its internal storage is the same Xerces uses; so you should just cast it using (LPCTSTR).


Alberto

Hiran


> -----Original Message----- > From: jiang lei [mailto:[EMAIL PROTECTED] > Sent: Wednesday, February 04, 2004 9:41 AM > To: [EMAIL PROTECTED] > Subject: Re: MemBufInputSource with CString > > > Hi Jimmy, > > A few suggestions: > > 1.in your function void X(CString setting, CString changeval) , > Passing parameters by object is usually not a good idea. > Unless, of course > you want to make copies and leave the masters intact.( CString's copy > constructor, however, will share the master's buffer if the > LPCTSTR() cast > is not used.) > > 2. Notice that CString's internal buffer is of type "TCAR" > rather than the > intrinsic c type "char". It will change into "wchar_t" if > someone compiles > your program with a "UNICODE" directive. I'd preffer > std::string in this > case. But in your program I did not see any necessity to use a string > object. A simple "const char*" pointer will work just fine. > > 3. AFAIK XercesDOMParser will delete it's internal document in it's > destructor. So if you delete the parser in ParseDocument(), the > "DOMDocument"pointer you returned will be invalid and cause a > protection > fault if you try to use the object. On the other hand if you > don't delete > it, there will be a memory leak. So your program can either: > keep a pointer to the parser when you use "new" to > create it. Make sure > the parser lives long enough until you've finished using it's internal > document object. and then delete the parser. > or > make a copy of the parser's internal document and > delete the parser in > ParseDocument(); > > remember in C++ every object created with "new" should be > destructed with > "delete", and it's up to you to keep those objects valid. > > > > regards > > Lei > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > >

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to