[Shapelib] Re: shapelib improvements

Mateusz Loskot mateusz at loskot.net
Thu Dec 6 13:24:23 PST 2007


Tom Kazimiers wrote:
> Mateusz Loskot schrieb:
>> 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
>>   
> This would be a good thing!
> 
>>>>> 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
>>   
> 
> Sure it is on a "normal" desktop computer - but in Win CE environment
> one can only choose CharSet.Unicode as the whole OS works only with unicode.
> The UnmanagedType.LPStr I did not try out - I will test it. But since I
> have read that Win CE can only handle unicode I doupt it  would work.

Tom,

What about declaring Shapelib wrapper function as taking byte[]
Also, AFAIK it is also possible to use IntPtr for char* return type.

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



More information about the Shapelib mailing list