Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A memóriafájlokat támogató CFile-származtatott osztály.
Szemantika
class CMemFile : public CFile
Tagok
Nyilvános konstruktorok
| Név | Leírás |
|---|---|
| CMemFile::CMemFile | Memóriafájl-objektumot hoz létre. |
Nyilvános metódusok
| Név | Leírás |
|---|---|
| CMemFile::Attach | Memóriablokkot csatol a parancshoz CMemFile. |
| CMemFile::D etach | Leválasztja a memóriablokkot, CMemFile és visszaad egy mutatót a leválasztott memóriablokkra. |
| CMemFile::GetBufferPtr | Lekérés vagy írás a memóriafájlt háttérként tartalmazó memóriapufferbe. |
Védett metódusok
| Név | Leírás |
|---|---|
| CMemFile::Alloc | Felülbírálás a memóriafoglalási viselkedés módosításához. |
| CMemFile::Free | Felülbírálás a memória felszabadítási viselkedésének módosításához. |
| CMemFile::GrowFile | Felülbírálás a fájl növekvő viselkedésének módosításához. |
| CMemFile::Memcpy | Felülbírálás a memória másolási viselkedésének módosításához fájlok olvasása és írása során. |
| CMemFile::Realloc | Felülbírálás a memória újraelosztási viselkedésének módosításához. |
Megjegyzések
Ezek a memóriafájlok úgy viselkednek, mint a lemezfájlok, kivéve, hogy a fájl ram-ban van tárolva, nem pedig lemezen. A memóriafájl a következő esetekben hasznos:
- gyors ideiglenes tárolás
- nyers bájtok átvitele független folyamatok között
- szerializált objektumok átvitele független folyamatok között
CMemFile az objektumok automatikusan lefoglalhatják saját memóriájukat. Vagy csatolhatja saját memóriablokkját az objektumhoz az CMemFileCsatolás meghívásával. A memóriafájl automatikus növeléséhez szükséges memória mindkét esetben -méretű növekményekben van lefoglalva nGrowBytes, ha nGrowBytes nem nulla.
A memóriablokk automatikusan törlődik az CMemFile objektum megsemmisítésekor, ha a memóriát eredetileg az CMemFile objektum foglalta le; ellenkező esetben Ön felelős az objektumhoz csatolt memória felszabadításáért.
A memóriablokkot a Leválasztás CMemFile érheti el az objektumról való leválasztásakor megadott mutatón keresztül.
A leggyakoribb használat CMemFile egy CMemFile objektum létrehozása és használata CFile tagfüggvények meghívásával.
CMemFile Automatikusan megnyitja azt: nem hívja meg a CFile::Open fájlt, amelyet csak lemezfájlokhoz használ. Mivel CMemFile nem használ lemezfájlt, a rendszer nem használja az adattagot CFile::m_hFile .
A CFileDuplikált, a LockRange és az UnlockRange tagfüggvények nincsenek implementálva a következőhöz CMemFile: . Ha ezeket a függvényeket egy CMemFile objektumon hívja meg, egy CNotSupportedExceptiont kap.
CMemFile a futásidejű könyvtárfüggvényeket használja: malloc, realloc és free to allocate, reallocate, and deallocate memory; és a belső memcpy , amely letiltja a másolási memóriát olvasáskor és íráskor. Ha módosítani szeretné ezt a viselkedést vagy a viselkedést egy fájl létrehozásakor CMemFile , saját osztályt CMemFile kell létrehoznia, és felül kell bírálnia a megfelelő függvényeket.
További információ: CMemFileFájlok az MFC-ben és a memóriakezelésben (MFC) és a fájlkezelés a Run-Time könyvtár referenciájában.
Öröklési hierarchia
CMemFile
Követelmények
Fejléc: afx.h
CMemFile::Alloc
Ezt a függvényt tagfüggvények CMemFile hívják.
virtual BYTE* Alloc(SIZE_T nBytes);
Paraméterek
nBytes
Lefoglalandó memória bájtjainak száma.
Visszaadott érték
A lefoglalt memóriablokkra mutató mutató, vagy null értékű, ha a foglalás sikertelen volt.
Megjegyzések
A függvény felülbírálása egyéni memóriafoglalás implementálásához. Ha felülbírálja ezt a függvényt, valószínűleg felül kell bírálnia az Ingyenes és a Realloc függvényt is.
Az alapértelmezett implementáció a futásidejű könyvtárfüggvény malloc használatával foglalja le a memóriát.
CMemFile::Attach
Hívja meg ezt a függvényt, hogy memóriablokkot csatoljon a függvényhez CMemFile.
void Attach(
BYTE* lpBuffer,
UINT nBufferSize,
UINT nGrowBytes = 0);
Paraméterek
lpBuffer
Mutasson arra a pufferre, amelyhez CMemFilehozzá szeretne csatolni.
nBufferSize
Egy egész szám, amely a puffer méretét adja meg bájtban.
nGrowBytes
A memóriafoglalás növekedése bájtban.
Megjegyzések
Ez a memóriablokk memóriafájlként való használatát okozza CMemFile .
Ha az nGrowBytes értéke 0, CMemFile a fájl hosszát nBufferSize értékre állítja. Ez azt jelenti, hogy a memóriablokkban lévő, a csatolás CMemFile előtt lévő adatok lesznek a fájlként használva. Az ilyen módon létrehozott memóriafájlok nem termeszthetők.
Mivel a fájl nem termeszthető, ügyeljen arra, hogy ne kísérelje CMemFile meg növelni a fájlt. Ne hívja meg például a CMemFileCFile::Write felülbírálásait, ha a végén ír, vagy nem hívja meg a CFile::SetLength függvényt az nBufferSize-nél hosszabb hosszúságúra.
Ha az nGrowBytes értéke 0-nál nagyobb, CMemFile figyelmen kívül hagyja a csatolt memóriablokk tartalmát. A memóriafájl tartalmát az alapoktól kell megírnia a CMemFile felülbírálással CFile::Write. Ha a fájl végére próbál írni, vagy a fájl felülbírálásának CMemFilemeghívásával megkísérli növelni a CFile::SetLength fájlt, CMemFile a memóriafoglalás nGrowBytes-lépésekben növekszik. A memóriafoglalás növekedése sikertelen lesz, ha az átadott Attach memóriablokk nem az Alloc-tal kompatibilis metódussal lett lefoglalva. Ahhoz, hogy kompatibilis legyen az alapértelmezett implementációval Alloc, le kell foglalnia a memóriát a malloc vagy a calloc futásidejű kódtárfüggvényével.
CMemFile::CMemFile
Az első túlterhelés üres memóriafájlt nyit meg.
CMemFile(UINT nGrowBytes = 1024);
CMemFile(
BYTE* lpBuffer,
UINT nBufferSize,
UINT nGrowBytes = 0);
Paraméterek
nGrowBytes
A memóriafoglalás növekedése bájtban.
lpBuffer
Mutasson egy olyan pufferre, amely az nBufferSize méretre vonatkozó információkat fogad.
nBufferSize
A fájlpuffer méretét bájtban megadó egész szám.
Megjegyzések
A fájlt a konstruktor nyitja meg. Ne hívja meg a CFile::Open fájlt.
A második túlterhelés ugyanúgy működik, mintha az első konstruktort használták volna, és azonnal összecsatolásnak nevezték volna ugyanazokkal a paraméterekkel. Részletekért lásd a Attach.
példa
CMemFile f; // Ready to use - no Open necessary.
BYTE * pBuf = (BYTE *)new char [1024];
CMemFile g(pBuf, 1024, 256);
// same as CMemFile g; g.Attach(pBuf, 1024, 256);
CMemFile::D etach
Hívja meg ezt a függvényt, hogy egy mutatót kapjon a használt memóriablokkhoz CMemFile.
BYTE* Detach();
Visszaadott érték
A memóriafájl tartalmát tartalmazó memóriablokkra mutató mutató.
Megjegyzések
A függvény meghívása szintén bezárja a CMemFile. A memóriablokkot CMemFile újracsatlakoztathatja az Attach meghívásával. Ha újra szeretné használni a fájlt, és az benne lévő adatokat szeretné használni, hívja meg a CFile::GetLength parancsot a fájl hosszának lekéréséhez a hívás Detachelőtt. Ha egy memóriablokkot CMemFile csatol ahhoz, hogy az adatokat (nGrowBytes == 0) használhassa, akkor nem tudja növelni a memóriafájlt.
CMemFile::Free
Ezt a függvényt tagfüggvények CMemFile hívják.
virtual void Free(BYTE* lpMem);
Paraméterek
lpMem
Mutasson a felszabadítani kívánt memóriára.
Megjegyzések
A függvény felülbírálása egyéni memóriaelosztó implementálásához. Ha felülbírálja ezt a függvényt, valószínűleg az Alloc és a Realloc függvényt is felül kell bírálnia.
CMemFile::GetBufferPtr
Lekérés vagy írás a memóriafájlt háttérként tartalmazó memóriapufferbe.
virtual UINT GetBufferPtr(
UINT nCommand,
UINT nCount = 0,
void** ppBufStart = NULL,
void** ppBufMax = NULL
);
Paraméterek
nCommand
A pufferCommand végrehajtása (bufferCheck, bufferCommit, , bufferReadvagy bufferWrite).
nCount
Az nCommand függvénytől függően a pufferben az olvasáshoz, íráshoz vagy véglegesítéshez tartozó bájtok száma. Amikor a pufferből olvas, adja meg a -1, hogy a puffer az aktuális pozícióból a fájl végéhez legyen visszajuttatva.
ppBufStart
[kifelé] A puffer kezdete. Akkor kell lennieNULL, ha az nCommand .bufferCommit
ppBufMax
[kifelé] A puffer vége. Akkor kell lennieNULL, ha az nCommand .bufferCommit
Visszaadott érték
| parancsérték | Visszaadott érték |
|---|---|
buffercheck |
A bufferDirect értéket adja vissza, ha a közvetlen pufferelés támogatott, egyébként 0. |
bufferCommit |
Visszatér 0 |
bufferRead vagy bufferWrite |
A visszaadott pufferterület bájtjainak számát adja vissza. a ppBufStart és a ppBufMax az olvasási/írási puffer elejére és végére mutat. |
Megjegyzések
A memóriapuffer (m_nPosition) aktuális pozíciója az nCommandtól függően a következő módokon halad:
| nCommand | pufferpozíció |
|---|---|
bufferCommit |
Az aktuális pozíció a véglegesített puffer méretével halad előre. |
bufferRead |
Az aktuális pozíció az olvasási puffer méretével halad előre. |
CMemFile::GrowFile
Ezt a függvényt több tagfüggvény is meghívja CMemFile .
virtual void GrowFile(SIZE_T dwNewLen);
Paraméterek
dwNewLen
A memóriafájl új mérete.
Megjegyzések
Felülbírálhatja, ha módosítani szeretné a fájl növekedésének módját CMemFile . Az alapértelmezett implementáció meghívja a Reallocot egy meglévő blokk (vagy memóriablokk létrehozásához az Alloc ) bővítésére, amely a memóriát a konstruktorban vagy a nGrowBytes hívás csatolásában megadott érték többszörösében helyezi el.
CMemFile::Memcpy
Ezt a függvényt a CMemFileCFile::Olvasás és CFile::Írás parancs felülbírálása hívja meg, hogy adatokat továbbítson a memóriafájlba és onnan.
virtual BYTE* Memcpy(
BYTE* lpMemTarget,
const BYTE* lpMemSource,
SIZE_T nBytes);
Paraméterek
lpMemTarget
Mutasson arra a memóriablokkra, amelybe a forrásmemória lesz másolva.
lpMemSource
Mutasson a forrásmemóriablokkra.
nBytes
A másolandó bájtok száma.
Visszaadott érték
Az lpMemTarget másolata.
Megjegyzések
Bírálja felül ezt a függvényt, ha módosítani szeretné a memóriamásolatok módját CMemFile .
CMemFile::Realloc
Ezt a függvényt tagfüggvények CMemFile hívják.
virtual BYTE* Realloc(
BYTE* lpMem,
SIZE_T nBytes);
Paraméterek
lpMem
Az újratelepítendő memóriablokkra mutató mutató.
nBytes
A memóriablokk új mérete.
Visszaadott érték
Az újratelepített (és esetleg áthelyezett) memóriablokkra mutató mutató, vagy null értékű, ha az újratelepítés sikertelen volt.
Megjegyzések
Felülbírálja ezt a függvényt az egyéni memóriaáthelyezés implementálásához. Ha felülbírálja ezt a függvényt, valószínűleg az Alloc és a Free függvényt is felül kell bírálnia.