CreateILockBytesOnHGlobal

複合ファイルのメモリ内ストレージに使用するバイトを格納するための HGLOBAL メモリハンドルを用いるバイト配列オブジェクトを作成する。

CreateILockBytesOnHGlobal hGlobal, fDeleteOnRelease, pplkbyt

hGlobal : [int] GlobalAlloc 関数によって割り当てられたメモリハンドル。NULL の場合は新しいハンドルが割り当てられる。ハンドルは移動可能かつ破棄不可として割り当てなければならない。
fDeleteOnRelease : [int] このバイト配列オブジェクトの基となるハンドルを、オブジェクトが解放されたときに自動的に解放するかどうかを指定するフラグ。FALSE に設定されている場合、呼び出し側は最終解放後に hGlobal を解放しなければならない。TRUE に設定されている場合、最終解放時に hGlobal パラメータが自動的に解放される。
pplkbyt : [var] 新しいバイト配列オブジェクトへのインターフェイスポインタを受け取る ILockBytes ポインタ変数のアドレス。

(プラグイン / モジュール : ole32.dll)

解説

複合ファイルのメモリ内ストレージに使用するバイトを格納するための HGLOBAL メモリハンドルを用いるバイト配列オブジェクトを作成する。

[戻り値]
この関数は標準の戻り値 E_INVALIDARG および E_OUTOFMEMORY に加えて以下をサポートする。

[備考]
hGlobal が NULL の場合、CreateILockBytesOnHGlobal
は新しいメモリハンドルを割り当て、バイト配列は初期状態では空となる。hGlobal が NULL
でない場合、バイト配列オブジェクトの初期内容はそのメモリブロックの現在の内容となる。したがって、この関数は、たとえば
StgCreateDocfileOnILockBytes
関数によって以前に作成されたストレージオブジェクトを再ロードするために、メモリ上の既存のバイト配列を開く目的にも使用できる。新しいバイト配列オブジェクトの作成によって、メモリハンドルとその内容が変更されることはない。バイト配列の初期サイズは、GlobalSize
関数が返す hGlobal
のサイズとなる。これは丸めの関係で、ハンドルに対して最初に割り当てられたサイズと同じとは限らない。バイト配列の論理サイズが重要な場合は、CreateILockBytesOnHGlobal
の呼び出しの後に ILockBytes::SetSize の呼び出しを続ける。CreateStreamOnHGlobal
でバイト配列オブジェクトを作成した後は、StgCreateDocfileOnILockBytes
を使用してメモリ上に新しいストレージオブジェクトを作成したり、StgOpenStorageOnILockBytes
を使用して、メモリブロック内にすでに存在する既存のストレージオブジェクトを再度開いたりできる。GetHGlobalFromILockBytes
を呼び出すことで、バイト配列オブジェクトに関連付けられているメモリハンドルを取得できる。メモリハンドルを
CreateILockBytesOnHGlobal に渡した場合、または GetHGlobalFromILockBytes
を呼び出した場合、この関数のメモリハンドルは、バイト配列オブジェクトがそれを使用している間も呼び出し側から直接アクセスできる。この機能を使用する際には、適切な注意を払い、その影響を理解しておくこと。
(以下省略)

情報

プラグイン / モジュールole32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の ole32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_ole32_gen2.hs