Delphi WinRT文字列 HSTRINGはハンドル
Delphi 10.3 わたくし毛利のライセンス有効期限が後4日となりました。
わたくしの場合、仕事でDelphiを使うことが無いのでCommunity Editionです。Delphiで、WinRTでの文字列渡しを行う場合StringではなくHSTRINGという型を使います。以前、TWindowsStringを使うと簡単ですということをブログにも書いたのですが、このTWindowsStringも内部ではHSTRINGを使っています。このHSTRINGは、THandle型です。なのでNativeUInt数値しか持っていません。StringからHSTRINGへ変換する方法はWindowsCreateString()を使います。このWindowsCreateString()はWinRT APIです。Delphiのライブラリにも入っています。
function WindowsCreateString(sourceString: PCNZWCH; length: UINT32; out Str: HSTRING): HRESULT; stdcall;
下記のようなStrToHSTRINGという関数を作って試してみました。
function StrToHSTRING(const s: String): HSTRING;
begin
WindowsCreateString(PChar(s), System.Length(s), Result);
end;
下記のように変換できます。
var str: HSTRING := StrToHSTRING('毛利');
その逆、HSTRINGからString変換したい場合もWinRT APIにはWindowsGetStringRawBuffer()という関数が用意されています。もちろんDelphiのライブラリにも入っています。
function WindowsGetStringRawBuffer(str: HSTRING; len: PCardinal): PCWSTR; stdcall;
PCWSTRなのでPWideCharですね。下記のように変換かければOKです。
var str1: String := WindowsGetStringRawBuffer(str, nil);
この記事が気に入ったらサポートをしてみませんか?