Re: how to get the local?

2011-06-02 Thread Lloyd Dupont

Yes and no!

On one hand I'm a fervent believer of all things Windows 7! :P

On the other hand my (learning) D project is about writing an installer. 
Which should just work with no unexpected dependencies!
I was telling to myself earlier today too that I should not use this 
function, just in case! :)



Nick Sabalausky  wrote in message news:is770e$1a00$1...@digitalmars.com...

Andrej Mitrovic andrej.mitrov...@gmail.com wrote in message
news:mailman.521.1306960464.14074.digitalmars-d-le...@puremagic.com...

From my understanding of this page
http://msdn.microsoft.com/en-us/library/dd318136%28v=vs.85%29.aspx :


Lloyd, if the program you're writing is designed to be sold or distributed
to the public then I'd highly recommend against doing anything that requires
at least Vista. From what I've heard, the adoption rates of Vista and Win7
haven't been very good and about half of the Windows systems out there are
still XP and pretty much holding there. A *lot* of Windows users are
deliberately sticking with XP, and you'll be loosing a lot of people.

Of course, if your software is only designed to be used internally by some
company, or just for you own use, etc., then obviously it doesn't matter...



Re: how to get the local?

2011-06-01 Thread Lloyd Dupont

I tried to add that to my D file
===
public import std.c.windows.windows;

extern(Windows)
{
   int GetUserDefaultLocaleName(LPWSTR lpLocaleName, int cchLocaleName);
}
===
and compile and link to kernel32.lib

But I got the following compile error:
Error1Error 42: Symbol Undefined _GetUserDefaultLocaleName@8 
C:\Dev\DTest\DTest1\Dexperiment\


Any clues?


Lloyd Dupont  wrote in message news:is5gm7$1a8u$1...@digitalmars.com...

I'm on a windows PC in Australia
I'd like to get the string en-AU and en from Windows
How do I do that please? 



Re: how to get the local?

2011-06-01 Thread Steven Schveighoffer
On Wed, 01 Jun 2011 10:31:45 -0400, Lloyd Dupont ld-rem...@galador.net  
wrote:



I tried to add that to my D file
===
public import std.c.windows.windows;

extern(Windows)
{
int GetUserDefaultLocaleName(LPWSTR lpLocaleName, int cchLocaleName);
}
===
and compile and link to kernel32.lib

But I got the following compile error:
Error1Error 42: Symbol Undefined _GetUserDefaultLocaleName@8  
C:\Dev\DTest\DTest1\Dexperiment\


Any clues?


Typically, windows functions come in two varieties, the A and the W  
version.  This is hidden by a macro in C, so all you ever call is  
GetUserDefaultLocaleName (and that's how it is in the docs even).  But in  
D, which does not have a pre-processor, you must add the A (ascii) or W  
(wide) to the function name.  Try:


extern(Windows)
{
int GetUserDefaultLocaleNameW(LPWSTR lpLocaleName, int cchLocaleName);
}

-Steve


Re: how to get the local?

2011-06-01 Thread Don

Lloyd Dupont wrote:

I tried to add that to my D file
===
public import std.c.windows.windows;

extern(Windows)
{
   int GetUserDefaultLocaleName(LPWSTR lpLocaleName, int cchLocaleName);
}
===

Try:
extern(Windows)
{
   int GetUserDefaultLocaleNameW(LPWSTR lpLocaleName, int cchLocaleName);
}


and compile and link to kernel32.lib

But I got the following compile error:
Error1Error 42: Symbol Undefined _GetUserDefaultLocaleName@8 
C:\Dev\DTest\DTest1\Dexperiment\


Any clues?


Lloyd Dupont  wrote in message news:is5gm7$1a8u$1...@digitalmars.com...

I'm on a windows PC in Australia
I'd like to get the string en-AU and en from Windows
How do I do that please?


Re: how to get the local?

2011-06-01 Thread Lloyd Dupont

Thanks for the link hey! :)
Otherwise I still get the same linking error with the W :(


Andrej Mitrovic  wrote in message 
news:mailman.518.1306939098.14074.digitalmars-d-le...@puremagic.com...



From what I can tell you're using the wide version, so try prototyping

it as GetUserDefaultLocaleNameW - note the W

Otherwise you should really get
http://dsource.org/projects/bindings/wiki/WindowsApi , which has
prototypes for many windows functions. You just have to build and use
it with --version=Unicode if you want GetUserDefaultLocaleName to
alias itself to GetUserDefaultLocaleNameW. 



Re: how to get the local?

2011-06-01 Thread Andrej Mitrovic
From my understanding of this page
http://msdn.microsoft.com/en-us/library/dd318136%28v=vs.85%29.aspx :

Note  The application should call this function in preference to
GetUserDefaultLCID if designed to run only on Windows Vista and
later.

It's not in kernel32.lib distributed with DMD. You would have to
create an OMF import lib by calling implib /system kernel32.dll (your
own kernel32.dll) if you're actually using Vista or a newer OS and
then linking with that. But you can say goodbye to supporting Windows
older than Vista.

OTOH GetUserDefaultLCID /is/ in the kernel32.lib distributed with DMD.
So why not use that?


Re: how to get the local?

2011-06-01 Thread Steven Schveighoffer
On Wed, 01 Jun 2011 16:13:44 -0400, Lloyd Dupont ld-rem...@galador.net  
wrote:



Thanks for the link hey! :)
Otherwise I still get the same linking error with the W :(


It looks like that particular function does not have the A and W versions.

See this page:

http://msdn.microsoft.com/en-us/library/dd318136%28v=vs.85%29.aspx

And see this for an example of something that comes in W and A variety:

http://msdn.microsoft.com/en-us/library/dd317759%28v=VS.85%29.aspx

Note at the bottom the Unicode and ANSI names part.

Here is my new theory -- note that the function is only defined on Vista  
or later.  DMD does not use the same object format as Windows (i.e. Visual  
C++), so all libraries have to be converted to a form that dmd can link  
with.  Most of the relevant Windows lib files are already pre-converted  
and included in the dmd distribution under windows/lib.  I'd bet that the  
version of kernel32.lib that was used to generate this file is an XP  
version, which would not contain this function.


I'd recommend investigating how to replace that kernel32.lib with the  
Vista (or later) version (I'm sure someone will tell you here ;) or try  
using the predecessor function, which should be universally compatible  
(See the above noted documentation).


-Steve




Andrej Mitrovic  wrote in message  
news:mailman.518.1306939098.14074.digitalmars-d-le...@puremagic.com...



From what I can tell you're using the wide version, so try prototyping

it as GetUserDefaultLocaleNameW - note the W

Otherwise you should really get
http://dsource.org/projects/bindings/wiki/WindowsApi , which has
prototypes for many windows functions. You just have to build and use
it with --version=Unicode if you want GetUserDefaultLocaleName to
alias itself to GetUserDefaultLocaleNameW.


Re: how to get the local?

2011-06-01 Thread Andrej Mitrovic
I beat you Steven!!

:P


Re: how to get the local?

2011-06-01 Thread Steven Schveighoffer
On Wed, 01 Jun 2011 16:38:05 -0400, Andrej Mitrovic  
andrej.mitrov...@gmail.com wrote:



I beat you Steven!!

:P


According to my newsreader and webnews, I beat you by 2 seconds:

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learnarticle_id=27286

FromAndrej Mitrovic andrej.mitrov...@gmail.com
DateWed, 1 Jun 2011 22:34:15 +0200

http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learnarticle_id=27285


FromSteven Schveighoffer schvei...@yahoo.com
DateWed, 01 Jun 2011 16:34:13 -0400

Note also the ordering of the article ids ;)

so THERE!

-Steve


Re: how to get the local?

2011-06-01 Thread Lloyd Dupont

Thanks for the quick answers hey!

Another quick one (it's time to go to work for me!)
Does this lib contains the MSI function?

Andrej Mitrovic  wrote in message 
news:mailman.518.1306939098.14074.digitalmars-d-le...@puremagic.com...



From what I can tell you're using the wide version, so try prototyping

it as GetUserDefaultLocaleNameW - note the W

Otherwise you should really get
http://dsource.org/projects/bindings/wiki/WindowsApi , which has
prototypes for many windows functions. You just have to build and use
it with --version=Unicode if you want GetUserDefaultLocaleName to
alias itself to GetUserDefaultLocaleNameW. 



Re: how to get the local?

2011-06-01 Thread Lloyd Dupont

Thanks, I'll have a look tonight!

Steven Schveighoffer  wrote in message 
news:op.vwezfbqmeav7ka@localhost.localdomain...


On Wed, 01 Jun 2011 16:13:44 -0400, Lloyd Dupont ld-rem...@galador.net
wrote:

Here is my new theory -- note that the function is only defined on Vista
or later.  DMD does not use the same object format as Windows (i.e. Visual
C++), so all libraries have to be converted to a form that dmd can link
with.  Most of the relevant Windows lib files are already pre-converted
and included in the dmd distribution under windows/lib.  I'd bet that the
version of kernel32.lib that was used to generate this file is an XP
version, which would not contain this function.

I'd recommend investigating how to replace that kernel32.lib with the
Vista (or later) version (I'm sure someone will tell you here ;) or try
using the predecessor function, which should be universally compatible
(See the above noted documentation).



Re: how to get the local?

2011-06-01 Thread Andrej Mitrovic
On 6/1/11, Steven Schveighoffer schvei...@yahoo.com wrote:
 On Wed, 01 Jun 2011 16:38:05 -0400, Andrej Mitrovic
 andrej.mitrov...@gmail.com wrote:

 I beat you Steven!!

 :P

 According to my newsreader and webnews, I beat you by 2 seconds:

 http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learnarticle_id=27286

 From  Andrej Mitrovic andrej.mitrov...@gmail.com
 Date  Wed, 1 Jun 2011 22:34:15 +0200

 http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learnarticle_id=27285


 From  Steven Schveighoffer schvei...@yahoo.com
 Date  Wed, 01 Jun 2011 16:34:13 -0400

 Note also the ordering of the article ids ;)

 so THERE!

 -Steve


Well, I'll have to write a formal complaint to Google for making me
believe I've won this battle.

Tip o' the hat to you, Sir.


Re: how to get the local?

2011-06-01 Thread Andrew Wiley
On Thu, Jun 2, 2011 at 12:23 AM, Nick Sabalausky a@a.a wrote:

 Andrej Mitrovic andrej.mitrov...@gmail.com wrote in message
 news:mailman.521.1306960464.14074.digitalmars-d-le...@puremagic.com...
  From my understanding of this page
  http://msdn.microsoft.com/en-us/library/dd318136%28v=vs.85%29.aspx :
 
  Note  The application should call this function in preference to
  GetUserDefaultLCID if designed to run only on Windows Vista and
  later.
 
  It's not in kernel32.lib distributed with DMD. You would have to
  create an OMF import lib by calling implib /system kernel32.dll (your
  own kernel32.dll) if you're actually using Vista or a newer OS and
  then linking with that. But you can say goodbye to supporting Windows
  older than Vista.
 
  OTOH GetUserDefaultLCID /is/ in the kernel32.lib distributed with DMD.
  So why not use that?

 Lloyd, if the program you're writing is designed to be sold or distributed
 to the public then I'd highly recommend against doing anything that
 requires
 at least Vista. From what I've heard, the adoption rates of Vista and Win7
 haven't been very good and about half of the Windows systems out there are
 still XP and pretty much holding there. A *lot* of Windows users are
 deliberately sticking with XP, and you'll be loosing a lot of people.

 Of course, if your software is only designed to be used internally by some
 company, or just for you own use, etc., then obviously it doesn't matter...


 Actually, Windows 7 is growing somewhat exponentially and XP is falling,
though that fall isn't accelerating too rapidly. However, XP still sits at
around 45%.