[Shapelib] Re: shapelib improvements

Mateusz Loskot mateusz at loskot.net
Thu Dec 6 12:30:12 EST 2007


Tom Kazimiers wrote:
>> Bram de Greve wrote:
>>> Mateusz Loskot wrote:
>>>> Possible solution is to use Unicode-aware API availalbe on 
>>>> Windows: _wfopen() (or CreateFile) Some time ago I ported
>>>> Shapelib to use wide-character versions of I/O functions as I
>>>> needed it on Windows CE (Unicode-only system).
>>>> 
>>>> Unfortunately, I have lost these modifications but it isn't a
>>>> big deal to do it.
>>> I've done similar modification for pyshapelib (I choose _wfopen
>>> because that's similar to what Python does), but as Frank is
>>> going to implement CreateFile IO hooks anyway, I think we can
>>> rely on that.  As long as he uses the Unicode versions of it,
>>> that is =).
>> Yes, I think so too.
> 
> I had this problem, too, as I needed to use this lib on win CE. And
> ported shapelib to unicode. If you want, I can send the sources.

Tom,

Perhaps we could make a unicode branch of Shapelib.
Frank's opinion is most important here, not mine.

>>> However, it still isn't without issues:
>>> 
>>> The CreateFile IO hooks will still accept char* filenames, which
>>> would be OK if we would treat it as UTF-8 and decode it with 
>>> MultyByteToWideChar.  But that would cause an assymetry with the 
>>> (default) tradition IO hooks that use fopen and still treats the
>>> char* filenames as ANSI encoded (in whatever codepage is set by
>>> the regionale).  If it looks like a duck ...
>> Right, there is some inconsistency. However, I can't see any better
>> option.
> 
> But if you use shapelib as a dll from another program, esp. a managed
> code one (I use C#) - on windows CE you have the only option to call
> with unicode parameters. This means you have to write wrappers which
> to the transformation or one makes the dll unicode aware (this is
> what I did). Are there any ways to get a managed to unmanaged call on
> Win CE working with char?

Doesn't marchaling to UnmanagedType.LPStr work?
Also, CharSet attribute of DLLImport to control how encoding information
is marshalled. CharSet.Ansi is default for C++, so Unicode->ANSI is
translated automatically.

Cheers
-- 
Mateusz Loskot
http://mateusz.loskot.net


More information about the Shapelib mailing list