[PATCH 15/15] api-ms-win-core-winrt-string: Implement a few HSTRING functions.

Martin Storsjö martin at martin.st
Sat Dec 6 12:44:44 CST 2014


On Sat, 6 Dec 2014, Sebastian Lackner wrote:

> On 06.12.2014 17:48, Martin Storsjö wrote:
>> On Sat, 6 Dec 2014, Sebastian Lackner wrote:
>>
>>> Hi Martin,
>>>
>>> please note that besides functions like WindowsSubstring which
>>> implicitly manipulate the string buffer, there are also some
>>> functions for explicit string buffer management:
>>>
>>> WindowsPreallocateStringBuffer - allocate a new string buffer with
>>> refcount 1 WindowsPromoteStringBuffer - create a new string based
>>> on an existing string buffer without incrementing refcount
>>> WindowsDeleteStringBuffer - decrement the refcount of a string
>>> buffer
>>
>> Yep, I saw these as well. Although the MSDN page for
>> WindowsDeleteStringBuffer doesn't talk about refcounts anywhere I can
>> see.
>>
>> Is the only way of using these string buffers to allocate a certain
>> size, modify the WCHAR* that WindowsPreallocateStringBuffer returned,
>> or are there any other functions involved with these as well?
>>
>> // Martin
>
> No, there are no further functions involved. The idea behind this is 
> that all WindowsStrings are immutable, and cannot (= should not) be 
> modified anymore after a HSTRING was assigned. Allocating first the 
> string buffer, and later promoting to a HSTRING allows to savely modify 
> the contents (for example reading it from a file). I guess this is 
> mainly for performance reasons, otherwise the content would always have 
> to be copied.

Indeed, but since you don't seem to be able to change the length of the 
allocated HSTRING_BUFFER, I don't see much of the idea in that API (for 
e.g. creating strings dynamically), except for avoiding a copy when it is 
made into a HSTRING. But I guess that was an important enough usecase to 
warrant that API.

Anyway, I should be able to fit in support for these functions as well 
without any bigger issues.

// Martin


More information about the wine-devel mailing list