見出し画像

Delphi WinRT文字列 HSTRINGはハンドル

Delphi 10.3 わたくし毛利のライセンス有効期限が後4日となりました。

画像1

わたくしの場合、仕事で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;

画像2

下記のような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);

画像3



この記事が気に入ったらサポートをしてみませんか?