CSharedFile クラス
共有メモリ ファイルをサポートする CMemFile 派生クラス。
構文
class CSharedFile : public CMemFile
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CSharedFile::CSharedFile | CSharedFile オブジェクトを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CSharedFile::D etach | 共有メモリ ファイルを閉じ、そのメモリ ブロックのハンドルを返します。 |
CSharedFile::SetHandle | 共有メモリ ファイルをメモリ ブロックにアタッチします。 |
解説
メモリ ファイルはディスク ファイルと同様に動作します。 違いは、メモリ ファイルがディスクではなく RAM に格納されていることです。 メモリ ファイルは、高速一時ストレージ、または独立したプロセス間で生バイトまたはシリアル化されたオブジェクトを転送する場合に便利です。
共有メモリ ファイルは、そのメモリ内の他のメモリ ファイルとは異なり、 GlobalAlloc Windows 関数を使用して割り当てられます。 CSharedFile
クラスは、グローバルに割り当てられたメモリ ブロック (GlobalAlloc
を使用して作成) にデータを格納します。このメモリ ブロックは、DDE、クリップボード、またはその他の OLE/COM の均一なデータ転送操作 (たとえば、IDataObject
を使用) を使用して共有できます。
GlobalAlloc
は、メモリへのポインターではなく HGLOBAL ハンドルを返します ( malloc によって返されるポインターなど)。 HGLOBAL ハンドルは、特定のアプリケーションで必要です。 たとえば、クリップボードにデータを配置するには、HGLOBAL ハンドルが必要です。
CSharedFile
ではメモリ マップファイルは使用されません。また、プロセス間でデータを直接共有することはできません。
CSharedFile
オブジェクトは、独自のメモリを自動的に割り当てることができます。 または、 CSharedFile
オブジェクトに独自のメモリ ブロックをアタッチするには、 CSharedFile::SetHandle を呼び出します。 どちらの場合も、メモリ ファイルを自動的に拡張するためのメモリは、nGrowBytes
が 0 でない場合は、nGrowBytes
サイズの増分で割り当てられます。
詳細については、「Run-Time ライブラリ リファレンスの「MFC および File Handling のFiles」を参照してください。
継承階層
CSharedFile
要件
Header: afxadv.h
CSharedFile::CSharedFile
CSharedFile
オブジェクトを構築し、そのオブジェクトにメモリを割り当てます。
CSharedFile(
UINT nAllocFlags = GMEM_DDESHARE | GMEM_MOVEABLE,
UINT nGrowBytes = 4096);
パラメーター
nAllocFlags
メモリの割り当て方法を示すフラグ。 有効なフラグ値の一覧については、 GlobalAlloc を参照してください。
nGrowBytes
メモリ割り当ての増分 (バイト単位)。
CSharedFile::D etach
この関数を呼び出してメモリ ファイルを閉じ、メモリ ブロックからデタッチします。
HGLOBAL Detach();
戻り値
メモリ ファイルの内容を格納しているメモリ ブロックのハンドル。
解説
SetHandleを呼び出して、Detachによって返されるハンドルを使用して、再度開くことができます。
CSharedFile::SetHandle
グローバル メモリのブロックを CSharedFile
オブジェクトにアタッチするには、この関数を呼び出します。
void SetHandle(
HGLOBAL hGlobalMemory,
BOOL bAllowGrow = TRUE);
パラメーター
hGlobalMemory
CSharedFile
にアタッチするグローバル メモリへのハンドル。
bAllowGrow
メモリ ブロックの拡張を許可するかどうかを指定します。
解説
bAllowGrow が 0 以外の場合、メモリ ブロックのサイズは必要に応じて大きくなります。たとえば、メモリ ブロックのサイズよりも多くのバイトをファイルに書き込もうとするとします。