-
December 17th, 2005, 07:45 AM
#1
Unicode LPCTSTR Problem
Hello,
I have an Unicode application and need to call an DLL with Multibyte Interface. The Interface have an Function:
ThisFunction(LPCTSTR name)
How I can now give an Multibyte LPCTSTR from an Unicode application to that DLL. Everything I tried gave me the linker error that there is no Function available with wchar_t *. This is right cause the DLL expect const char *
So how to call it outside the Unicode application with an call like:
ThisFunction("Dialog");
With _T("Dialog") and L"Dialog it do not work (linker problem).
Ocrana
-
December 17th, 2005, 07:58 AM
#2
Re: Unicode LPCTSTR Problem
If the parameter is a constant then just call it with
Code:
ThisFunction("Dialog");
If the parameter is not a constant, use WideCharToMultiByte() to convert your Unicode string to a multibyte string (of type char*) and pass it to ThisFunction().
-
December 17th, 2005, 08:14 AM
#3
Re: Unicode LPCTSTR Problem
Originally Posted by Ocrana007
ThisFunction(LPCTSTR name)
How I can now give an Multibyte LPCTSTR from an Unicode application to that DLL.
This should be called as follows -
Code:
ThisFunction (_T ("A TCHAR Constant String"));
And...
Originally Posted by Ocrana007
Everything I tried gave me the linker error that there is no Function available with wchar_t *. This is right cause the DLL expect const char *
You mean compiler error (and not linker error)?
Originally Posted by Ocrana007
So how to call it outside the Unicode application with an call like:
With _T("Dialog") and L"Dialog it do not work (linker problem).
Post the actual error you see.
-
December 17th, 2005, 08:21 AM
#4
Re: Unicode LPCTSTR Problem
Originally Posted by Ocrana007
How I can now give an Multibyte LPCTSTR from an Unicode application to that DLL.
BTW, there is no such thing as a Multibyte LPCTSTR.
LPCTSTR is a typedef defined as -
Code:
typedef const TCHAR* LPCTSTR;
Where TCHAR is defined as -
Code:
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char_t TCHAR;
...put simply.
So, as you can see, depending on the definition of the UNICODE macro, LPCTSTR can be a wchar_t* or a char*
MBCS (Multi-Byte Character String) is basically a char* string that allows a simple character string to hold international characters by allowing a variable width of characters per symbol (alphabet).
So, a LPCTSTR can be a Wide Character String, or a Simple Character string depending on the definition of the UNICODE macro. If the latter, it can optionally be a MBCS string depending on the definition of the MBCS macro (that redirects all _t* string functions to mb* functions). So, a LPCTSTR being multi-byte is a special case of a LPCTSTR, and one must not pass a pure-MBCS string as a LPCTSTR - it will not compile for UNICODE settings.
Essentially, if your function accepts a LPCTSTR, supply a LPCTSTR string wrapped in the _T macro, and let the pre-processor definition convert the string for you - i.e. _T gets mapped as L when _UNICODE is defined (making the string literal a wide-character one), and ignored otherwise (making it a character string).
Last edited by Siddhartha; December 17th, 2005 at 08:33 AM.
-
December 17th, 2005, 08:37 AM
#5
Re: Unicode LPCTSTR Problem
Have you compiled the DLL with unicode -option as well? If not, you have to convert the unicode string passed to DLL-function to multibyte string. Since they are separate binaries, they don't automatically adapt to each other's settings.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|