On 11/26/2014 05:25 PM, Sven Barth wrote:
>
> So seemingly you could do MyStringType = type
AnsiString(CP_UTF16), and seemingly the size information is set
according to this.
No, you can't, because the RTL does not handle that. For AnsiString
the element size is *always* 1. It's hardcoded. AFAIK Delphi even does
a compile error if you use CP_UTF16.
Thanks for the clarification.
I now understand that the "Element Size" field in the String header is
quite dummy, as under the hood there are two completely separate
concepts for one-byte-Strings and 2-Byte Strings and none for other
Element sizes.
This to me is not obvious at all, as the language syntax and the String
header data structure suggest a more universal paradigm for multiple
string type brands, that each have an "element-size"6 and
"code-ID-number" setting, handled by a common infrastructure.
The "universal paradigm" would allow for extensions (e.g. UTF-32,
multiple 16 Bit Code pages, an additional fully dynamic String type,
n-byte "un-encoded" string types), as I described in the Wiki page.
The "dual mode" concept of course does not provide such extensibility,
and so I stop thinking about this (and bothering the community), and am
happy that it just works as it is.
Thanks again,
-Michael
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel