CMemFile::Attach
更新 : 2007 年 11 月
CMemFile にメモリ ブロックを結び付けます。
void Attach(
BYTE* lpBuffer,
UINT nBufferSize,
UINT nGrowBytes = 0
);
パラメータ
lpBuffer
CMemFile に結び付けるバッファへのポインタ。nBufferSize
バッファのサイズをバイト単位で指定する整数。nGrowBytes
メモリ割り付けの増加分を指定するバイト数。
解説
これにより、CMemFile はメモリ ファイルとしてそのメモリ ブロックを使用します。
nGrowBytes が 0 のときは、CMemFile のファイル長を nBufferSize に設定します。つまり、CMemFile を結び付ける前にメモリ ブロックにあったデータをファイルとして使います。この方法で作成されたメモリ ファイルは拡張できません。
ファイルが拡張できないので、CMemFile がファイルを拡張する操作をしないように注意してください。たとえば、CFile:Write を CMemFile でオーバーライドして呼び出しファイルの終端を越えて書き込んだり、CFile:SetLength を呼び出さずに nBufferSize よりも長いサイズを設定しないでください。
nGrowBytes が 1 以上の場合は、CMemFile は結び付けられたメモリの内容を無視します。CMemFile でオーバーライドした CFile::Write を使って、新規にメモリ ファイルの内容を書き込む必要があります。ファイルの終端を越えて書き込んだり、CMemFile でオーバーライドした CFile::SetLength を呼び出してファイルを拡張しようとすると、CMemFile は nGrowBytes で指定された単位でメモリを割り当て、拡張します。Attach に渡したメモリ ブロックが Alloc と互換性のある手法で割り当てられないと、メモリ割り当てによる拡張は失敗します。Alloc の既定の実装と互換性をとるには、ランタイム ライブラリ関数の malloc または calloc でメモリを割り当てます。
必要条件
ヘッダー : afx.h