experchange > vc.* > vc.mfc

Fausto Lopez (07-13-04, 08:06 PM)
Can any body help to figure out why the following code generates the
following errors at compile time, and also any suggestions on how to fix it?

BACKGROUND INFO
--HRESULT AnsiToUnicode(LPCSTR pszA, LPOLESTR* ppszW) <-- Function
definition
--private:
CString m_saveAsFilename; <-- Private variable definition inside class
--CString fullpath = GetDocument()->GetPathName();

CODE IN QUESTION
-- AnsiToUnicode(m_saveAsFilename,&m_pwBuffer);
-- AnsiToUnicode(fullpath,&m_pwBuffer);

ERROR MESSAGED FOR BOTH FUNCTION CALLS
error C2664: 'AnsiToUnicode' : cannot convert parameter 1 from 'class
CString' to 'const char *'
No user-defined-conversion operator available that can perform this
conversion, or the operator cannot be called

Fausto
Jonathan Wood (07-13-04, 08:27 PM)
Are you compiling with _UNICODE defined?

If so, CString will contain Unicode strings and will only be able to
automatically convert to w_char*.
Relvinian (07-14-04, 06:22 AM)
Fausto,

What this error message is saying is that the compiler can't convert a
CString object to a const char*. You will need to double type-cast the
CString object to get it into a const char* format.

Example:

(LPCSTR)(LPCTSTR)m_saveAsFilename
(LPCSTR)(LPCTSTR)fullpath

Also note:
If you are compiling the project with _UNICODE defined, CString
automatically uses unicode as the default (could be why you are receiving
this compiler error message). This could cause problems with your
type-casting if you have it so. If you don't have _UNICODE defined, the
double type-cast should work ok for you.

Relvinian

"Fausto Lopez" <fuzzlog2000> wrote in message
news:1548
[..]
Alexander Grigoriev (07-14-04, 06:27 AM)
Don't do those casts. You're just masking the error.

"Relvinian" <m> wrote in message
news:n-sq
[..]
Relvinian (07-14-04, 06:46 AM)
I wouldn't necessarily do them --- besides, if you watch the "guts", meaning
looking at the assembly, a pointer is a pointer, doesn't matter what type it
is. Just a four-byte value!

But if you know what the data is and are always aware, you'll be ok. Of
course, the better solution is finding out why!

But if you *always* compile for ANSI systems and you are using a CString
object and trying to pass data to a const char*, type casting is just fine.
But the question remains, why are you using CString or trying to pass data
to a const char* function instead of a (possible) w_char* function?

Relvinian

"Alexander Grigoriev" <alegr> wrote in message
news:4052
[..]
GuitarBill (07-14-04, 07:17 AM)
That could be quite a useful debugging tool - if [when] your program crashes
you could just look for these: (LPCSTR)(LPCTSTR) and immediately find where
the problem is.

Bill

"Relvinian" <m> wrote in message
news:n-sq
[..]
Mihai N. (07-14-04, 12:10 PM)
> --CString fullpath = GetDocument()->GetPathName();
> -- AnsiToUnicode(fullpath,&m_pwBuffer);

You try to use the CString as a target for the function.
This does not work.
You should get a buffer big enough (GetBuffer or GetBufferSetLength)
use this as a parameter to your call, then release it
(ReleaseBuffer or ReleaseBufferSetLength)

And you should be carefull that the CString is ANSI.
And with Dev.Studio 6 or older the only way to do this is
to have a non-unicode application.
Alexander Grigoriev (07-14-04, 03:45 PM)
You don't need a cast to get LPCTSTR from CString (other than when passing
it to a printf/Format).

"Relvinian" <m> wrote in message
news:n-ig
[..]
simerjohn04 (04-06-18, 10:09 AM)
Upgrade Outlook PST software quickly performs ANSI PST to UNICODE PST and UNICODE PST to ANSI PST. The Software is enhanced with an advanced conversion algorithm that support batch operations to convert PST files. It can safely convert PST files without causing any alteration to the original files and folders. The software supports all higher or lower versions of MicrosoftOutlook email client application.
visit here:-
thomasdark145 (02-10-20, 02:01 PM)
You can easily convert ANSI PST Files to Unicode PST Files format as well as your contacts and Calendar info With advanced PST Upgrade Software. Microsoft Outlook 2002 and earlier versions support ANSI file format that has a size limitation of 2 GB. On the other hand, Microsoft Outlook 2003 and later versions support Unicode file format that has a size limitation of 20 GB to 50 GB. If you're looking for a way to upgrade the PST file from ANSI format to Unicode format, The software enhanced with an advanced conversion algorithm that supports batch operations to convert PST files. For more details click here:
Similar Threads