System.PWideCharの記述例・備忘録

※全てのDelphiで動作する保証はありません。また、内容に関し管理人は全ての責任を負いかねます

変数のString型と固定のString型を結合し、それをPWideChar型に代入する場合の記述サンプルです。あくまでも私的な備忘録で、これよりももっと安全なコードがあると思われます。


var
    NewDrv: String;

begin

    NewDrv := 'D:\';

    //pFrom が PWideChar の時	
    foStruc.pFrom := PWideChar(NewDrv + '*.*');

    //代入先によっては #0 を付加    
    foStruc.pFrom := PWideChar(NewDrv + '*.*' +#0);

 

■System.PWideCharのヘルプには

type PWideChar = ^Char;

 

・NULL で終わる Unicode 文字列を表します。

・PWideChar は、WideChar 値(#0 文字を含む)が格納されたメモリ上の場所を指すポインタを表します。

・Delphi では、string や WideString から PWideChar 値を取得することができるため、NULL で終わる Unicode 文字列を想定している C や C++ のアプリケーションとシームレスに統合することができます。

メモ: PWideChar と通常の string 値を組み合わせて使うことは本質的に安全でありません。 PWideChar では、参照カウントもコピーオンライトも行われません。 そのため、string 値の破損やメモリ リークが起きる可能性があります