TSharedMemory = packed record
Int1: Integer;
Str1: String[255];
Str2: array [0..255] of Char;
Str3: WideString;
Obj: TMyObject;
end;
PSharedMemory = ^TSharedMemory;
使用中发现,对Str3也就是 WideString操作时会出错,对Obj也是,
难道共享内存只能用最原子的数据类型而且数据长度是固定的?如何把任意对象放到共享内存中共享?
Int1: Integer;
Str1: String[255];
Str2: array [0..255] of Char;
Str3: WideString;
Obj: TMyObject;
end;
PSharedMemory = ^TSharedMemory;
使用中发现,对Str3也就是 WideString操作时会出错,对Obj也是,
难道共享内存只能用最原子的数据类型而且数据长度是固定的?如何把任意对象放到共享内存中共享?
解决方案 »
- 低级问题
- 【求助】一个菜鸟问题,关于delphi开发的数据库客户端安装问题~
- 用quickreport做报表时,detailband里面却只显示去一条记录来
- 了解代理软件的来教教我,
- 如何把异常的消息截获并保存到文本里?
- 采用动态创建的组件怎么调用他的onclick等事件
- 用什么dbgrid控件能实现某column的DBlookupCombox功能,怎么用
- 用VPN连接后如何获得IP地址?
- ★★★★★关于ReadEventLog函数的使用---在线等待
- 菜鸟问题:多个线程同时动态创建timer1到同一个form,会造成冲突吗?
- 结婚散分咯~(之六)
- 谁给发一份Delphi2cs(Delphi代码转换到C#)
TSharedMemory = packed record
case Integer of
0: (Int1: Integer);
1: (Str1: String[255]);
2: (Str2: array [0..255] of Char);
3: (Str3: array[0..127] of WideChar);
4: (Obj: TObject);
end;
SizeOf(TSharedMemory), LPCTSTR(Alias));
这样写有问题吗
case Integer of
0: (Int1: Integer);
1: (Str1: String[255]);
2: (Str2: array [0..255] of Char);
3: (Str3: array[0..127] of WideChar);
4: (Obj: TObject);
让我有点摸不着头脑,能解释一下吗
==================================================
这个纪录的所有成员共享同一段内存,比方说,你对Str1:='abc';那么Str2也是'abc'.
我可能误解你的意思了,因为你的记录是不适合这种形式的。
case Interger of
变体记录 ...
在对象被创建时,对象本身所占用的内存在堆中自动分配,你无法“指定”分配到共享内存上。
TSharedMemory = packed record
Int1: Integer;
Str1: String[255];
Str2: array [0..255] of Char;
Str3: array [0..255] of WideChar;
//Obj: TMyObject;// TObject不可能直接共享了,你还是把他的属性或成员复制到本record中来吧
end;
PSharedMemory = ^TSharedMemory;