On Tuesday 16 September 2014 6:56:11 PM Geert Janssens wrote:
> On Saturday 13 September 2014 14:24:35 Fernando Rodriguez wrote:
> > On Saturday 13 September 2014 4:21:18 PM Geert Janssens wrote:
> > > Thanks a lot !
> > > 
> > > I'll try to apply a similar approach in gnucash for the
> > > home dir use case.
> > > 
> > > For my second case, anybody know how to read an
> > > environment variable directly in win32 using wide char
> > > functions ?
> > > 
> > > 
> > > Geert
> > > _______________________________________________
> > > gtk-app-devel-list mailing list
> > > gtk-app-devel-list@gnome.org
> > > https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> > 
> > You'd use the GetEnvironmentVariable function. What compiler and IDE
> > are you using?
> > 
> I'm using mingw32, gcc 4.8.1.
> 
> > In Windows every API function that deals with text has two variants,
> > so theres GetEnvironmentVariableA and GetEnvironmentVariableW.
> > 
> > If you use Visual Studio there's an option on project properties to
> > select the encoding and it #defines a symbol that defines the macros
> > to call either variant and you would use the TCHAR (there's a bunch
> > of typedefs for dealing with strings for example LPTSTR, LPSTR,
> > LPWSTR but they all boil down to the same thing, in this case LPSTR
> > is typedef for char*, LPWSTR wchar_t*, and LPTSTR is char* for ansi
> > and wchar_t* for unicode) type to store the strings (it's a typedef
> > for char when using ANSI and wchar_t when using unicode). I'm not
> > sure what the symbol is called so if you're not using VS you can just
> > use the wide char variants directly or look at the headers and find
> > out what you need to define.
> > 
> Thanks for the additional detail (for some reason my previous mail got 
truncated by the list 
> software.
> 
> I have now written this function:
> 
> #ifdef G_OS_WIN32
> #define BUFSIZE 4096
> static gchar* get_env_utf8 (const gchar* var_name)
> {
>     LPWSTR val_win;
>     gchar *val_utf8;
>     guint32 retval;
>     
>     ENTER();
>     val_win = (LPWSTR) malloc (BUFSIZE*sizeof(WCHAR));
>     if (!val_win)
>         return NULL; /* Out of memory... */
>     
>     retval = GetEnvironmentVariableW (g_utf8_to_utf16 (var_name, -1, NULL, 
NULL, NULL), 
> val_win, BUFSIZE);
>     if (0 == retval)
>         return NULL;  /* Variable not set */
>     
>     if (BUFSIZE < retval)
>     {
>         PWARN("Value of environment variable GNC_DOT_DIR is longer than %d. 
"
>               "The code can't handle this, so returning NULL instead.", 
BUFSIZE);
>         return NULL; /* Woa, path is way to long... */
>     }
>     
>     if ((val_utf8 = g_utf16_to_utf8 ((gunichar2*) val_win, -1, NULL, NULL, 
NULL)) != NULL)
>         return val_utf8;
>     else
>         return NULL;
> }
> #endif
> 
> But in the end val_utf8 still doesn't keep the special characters.
> 
> If the environment variable GNC_DOT_DIR is set to "c:\gcdev\Ɓukasz", val_win 
is printed in 
> gdb as L"c:\\gcdev\\Lukasz" and
> val_utf8 as "c:\\gcdev\\Lukasz"
> 
> If I examine the individual characters using
> print val_win[9] and print val_win[10] those result in
> L'L' and L'u'. To me that looks as if there are no wide characters in the 
original string. :(
> 
> This is really puzzling me. What am I missing ?
> 
> Geert

Sorry for taking so long, I've been struggling with something of my own. Did 
you ever get this sorted?

I'm not sure what's wrong. Are you running gdb from the console in windows or 
from an IDE?

I would try printing the bytes as hexadecimal to make sure you're not being 
lied to (use a short pointer to print them) or display it on a messagebox:

MessageBoxW(NULL, val_win, NULL, NULL); 

Also how did you set the env variable?
Can you echo it on the console or look it up on the GUI to make sure it's set 
right?


Let me know what you find, I'm curious.
-- 
----------
Fernando Rodriguez
frodriguez.develo...@outlook.com
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to