fMapHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, BOOL(True), PChar('search_his'));
fWasAlreadyOpen := (fMapHandle <> 0);
if not fWasAlreadyOpen then
fMapHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 8196,'search_his');
if fMapHandle = 0 then
raise Exception.Create( 'CreateFileMapping failed with error code '+IntToStr(GetLastError)); 上面已经创建了内存块,问题是我写不进去,而且写进去的是 Unicode 码
转码部分已经做啦,用 CopyMemory API写时出错,请高手给个CopyMemory使用例子,谢谢CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
fWasAlreadyOpen := (fMapHandle <> 0);
if not fWasAlreadyOpen then
fMapHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 8196,'search_his');
if fMapHandle = 0 then
raise Exception.Create( 'CreateFileMapping failed with error code '+IntToStr(GetLastError)); 上面已经创建了内存块,问题是我写不进去,而且写进去的是 Unicode 码
转码部分已经做啦,用 CopyMemory API写时出错,请高手给个CopyMemory使用例子,谢谢CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
解决方案 »
- 打包后显示access数据库路径不对,无法运行
- 用delphi开发的游戏"赏图历险II"准备发布了
- 高手请进,关于socket的连接数量和连接速度的问题~~!!!
- 哪位有delphi盒子的类QQ界面组件?
- 经常能看到在一些窗口的菜单的那行的最右边有个小图片,请问那是怎么加上去的??
- 本公司急聘delphi程序员一名!有意请进。(工作地点广州)
- 新手小问题
- 谁能tell me?
- 急!急!!急!!!怎样将位图的图象数据读入到一个二维数组中?
- 如何屏蔽win键 和 ctrl+esc 键
- 请教各位好心大侠!!!
- 本人发的一个小项目 http://prj.csdn.net/projdetail.aspx?pointid=7134
PShareMem = ^TShareMem;
TShareMem = record
Data: array[0..255] of char;
end;procedure TForm1.Button1Click(Sender: TObject);
var
str: pchar;
begin
str := pchar('共享内存');
CopyMemory(@(pShare^.data), Str, Length(str));
end;
CreateFileMapping/OpenFileMapping之后还需要执行MapViewOfFile将镜像关联到内存才能操作
type
PShareMem = ^TShareMem;
TShareMem = record
Data: array[0..255] of char;
end;
var
PShare: PShareMem;
HMapping: THandle;
procedure OpenMap;
begin
{创建一个文件映射内核对象}
HMapping := CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,SizeOf(TShareMem), pchar('Map Name'));
if (hMapping = 0) then
begin
Application.Terminate;
exit;
end;
{将文件数据映射到进程的地址空间}
PShare := PShareMem(MapViewOfFile(HMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0));
if PShare = nil then
begin
CloseHandle(HMapping);
Application.Terminate;
exit;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
str: pchar;
begin
str := pchar('共享内存');
CopyMemory(@(pShare^.data), Str, Length(str));
end;
Type
TData = record
Str: array[0..255] of Char;
end;
procedure CreateShareFile;
begin
FHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, SizeOf(TData), 'MapMEM');
if FHandle <> 0 then
begin
FDLLData := MapViewOfFile(FHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
if FDLLData <> nil then StrLCopy(FDllData.Str, PChar(ExtractFilePath(Paramstr(0))), 255);
end;
end;
调用:
function GetStr: string;
var
FHandle: LongWORD;
DLLData: PData;
_Str: string;
begin
FHandle := OpenFileMapping(PAGE_READWRITE, False, 'MapMEM');
if FHandle <> 0 then
try
DLLData := MapViewOfFile(FHandle, FILE_MAP_READ, 0, 0, 0);
if DLlData <> nil then
try
Result := DllData.Str;
finally
UnmapViewOfFile(DLLData);
end;
finally
CloseHandle(FHandle);
end;
end;