希望这个类对你会有帮助 TSharedMemory = Class( THandleObject )
Private
FSize :Integer;
FFirstCreated :Boolean;
FFileView :Pointer;
Public
Constructor Create(Const Name :String; Size :Integer);
Destructor Destroy; Override; Property Size :Integer Read FSize;
Property Buffer :Pointer Read FFileView;
Property FirstCreated :Boolean Read FFirstCreated;
End;//---------------------------------------------------------------------------
{ TSharedMem Class Implementation }
//---------------------------------------------------------------------------
Constructor TSharedMemory.Create( Const Name :String; Size :Integer );
Begin
Inherited Create;
FName := Name;
FSize := Size;
// CreateFileMapping, when called with $FFFFFFFF for the hanlde value,
// creates a region of shared memory
FHandle := CreateFileMapping( $FFFFFFFF, Nil, PAGE_READWRITE, 0,
Size, PChar( Name ) );
If FHandle = 0 Then Abort;
FFirstCreated := ( GetLastError = 0 );
// We still need to map a pointer to the handle of the shared memory region
FFileView := MapViewOfFile( FHandle, FILE_MAP_WRITE, 0, 0, Size );
If FFileView = Nil Then Abort;
End;
//---------------------------------------------------------------------------
Destructor TSharedMemory.Destroy;
Begin
If FFileView <> Nil Then UnmapViewOfFile( FFileView );
Inherited Destroy;
End;
//---------------------------------------------------------------------------
Private
FSize :Integer;
FFirstCreated :Boolean;
FFileView :Pointer;
Public
Constructor Create(Const Name :String; Size :Integer);
Destructor Destroy; Override; Property Size :Integer Read FSize;
Property Buffer :Pointer Read FFileView;
Property FirstCreated :Boolean Read FFirstCreated;
End;//---------------------------------------------------------------------------
{ TSharedMem Class Implementation }
//---------------------------------------------------------------------------
Constructor TSharedMemory.Create( Const Name :String; Size :Integer );
Begin
Inherited Create;
FName := Name;
FSize := Size;
// CreateFileMapping, when called with $FFFFFFFF for the hanlde value,
// creates a region of shared memory
FHandle := CreateFileMapping( $FFFFFFFF, Nil, PAGE_READWRITE, 0,
Size, PChar( Name ) );
If FHandle = 0 Then Abort;
FFirstCreated := ( GetLastError = 0 );
// We still need to map a pointer to the handle of the shared memory region
FFileView := MapViewOfFile( FHandle, FILE_MAP_WRITE, 0, 0, Size );
If FFileView = Nil Then Abort;
End;
//---------------------------------------------------------------------------
Destructor TSharedMemory.Destroy;
Begin
If FFileView <> Nil Then UnmapViewOfFile( FFileView );
Inherited Destroy;
End;
//---------------------------------------------------------------------------
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货