有成功的例子吗?请高手贴出来让我拜读。
解决方案 »
- 请问如何把长整数转化成时分秒形式的时间长度?
- 如何得到listview多行的Caption?
- 请问,如果用DELPHI做这样的外挂,需要什么技术?
- 在一个窗口上写了100多个过程,共计10多万行代码。 这程序还有运行的必要吗?
- dbexpress怎样用windows身份验证的方式连接到SQL Server
- 对DELPHI有兴趣的朋友进来看看 ;)
- 有没有高效一点的透明拷贝位图的办法
- DELPHI 中显示JPEG图象需要包含什么 .pas?
- 关于IE中设置下载提示的问题
- 一个还很不错的互联网数据库应用组件,速度,难度.
- 线程中的sleep函数前必须使用application.ProcessMessages;这样才可以在sleep的时候让别的线程工作?
- 如何实现dbgrid的排序,又经验的朋友指点一下啊
直接把对象(未实例化的变量)当作指针指向共享内存中的相应位置,就可以使用?!还是用Getmem分配内存,把共享内存中的数据用Move拷贝回来,再....,我试了很多方法,都不行,对象中的内容都不正确。是我写错了,还是要怎样弄?请高手指教。
一个类的实例不一定放在一块连续的内存的,如果那个类有十M大,到哪找这好好的一块内存啊.
还是自己override类的assign方法吧.!!!
进程1中的程序是这样:
var
obj:TMyObject;
pobj:PMyObject;
psm:Pointer;
begin
psm:=GetSharedMem(SHARED_MEM_NAME,SizeOf(TMyObject));
obj:=TMyObject.Create('objname');
Move(obj,psm^,SizeOf(TMyObject));
pobj:=psm; ShowMessage(pobj.name);
....
end; 正常的显示了"objname"的MessageBox现在,另一个进程(进程2)中:
var
psm,p:Pointer;
pobj:PMyObject;
begin
psm:=GetSharedMem(SHARED_MEM_NAME,SizeOf(TMyObject));
...有效性检查..
GetMem(p,SizeOf(TMyObject));
...有效性检查..
DebugOutput('here');
Move(psm^,p^,SizeOf(TMyObject));
DebugOutput('here2');
pobj:=p;
DebugOutput('here3');
DebugOutput(pobj.name);
.... 结果执行到输出"here3"后,访问pobj.name时就报错“..内存.. 不能written..."
"....内存...不能 read..."
然后进程2就coredump了。 name属性是从TMyObject的父对象TFatherObject那里继承的,而TFatherObject是这样定义的: TFatherObject=class(TObject)
private
...
FName:string;
...
public
...
property Name:string read FName write SetName;
...
end.这样的对象不能传送到其他进程里使用吗?
老大,你别痴心忘想了,你没看过C++内存分配的方面的书吗?
一个类的实例不一定放在一块连续的内存的,如果那个类有十M大,到哪找这好好的一块内存啊.
还是自己override类的assign方法吧.!!!
----------------------------
这个连续的 是线性地址的 自然 线性地址都是连续的如果采取分页机制,那么线性地址经过映射后的物理地址就不一定是连续的了, 而没有采用分页的话,那么线性地址就是物理地址。
在一个进程里,先getmem一块内存,再
将另一个类的实例move过来,大小按常理就是sizeof(类名),
定义一个类指针去访问,肯定会失败!
如果是record就可以,这就可以证明类在内存存放是不连续的!
另一方面,所有类的函数和过程都是共用地址的(面向对象语言编译器都是这样编译的,因为完全一样,着没有必要浪费空间),如果所有的类实例都是一样大小的,而且连续的,
那类里的函数和方法到底放在哪个实例里边?
真是怪了,,
大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!大家别怪我才疏学浅,胡乱说话!
#include <windows.h>using namespace std;class CPerson
{
public:
char m_szName[10];
char m_szSex;
int m_nAge;
public:
CPerson(char* pName, char Sex, int Age)
{
strncpy(m_szName, pName, 10);
m_szSex = Sex;
m_nAge = Age;
}
};void main()
{
CPerson p("Amazon", 'F', 20);
cout << p.m_szName << " # " << p.m_szSex << " # " << p.m_nAge << endl; HANDLE hMap;
hMap = ::CreateFileMapping((HANDLE) 0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
sizeof(CPerson),
"Person");
if (hMap == 0)
{
cout << " CreateFileMapping failed " << endl;
return;
}
LPVOID pView;
pView = ::MapViewOfFile(hMap,
FILE_MAP_WRITE,
0,
0,
sizeof(CPerson));
if (pView == NULL)
{
cout << " MapViewOfFile failed " << endl;
return;
} memcpy(pView, &p, sizeof(CPerson));
system("pause");
}
#include <windows.h>using namespace std;class CPerson
{
public:
char m_szName[10];
char m_szSex;
int m_nAge;
public:
CPerson(char* pName, char Sex, int Age)
{
strncpy(m_szName, pName, 10);
m_szSex = Sex;
m_nAge = Age;
}
CPerson()
{
memset(m_szName, 0, sizeof(m_szName));
m_szSex = 'M';
m_nAge = 18;
}
};void main()
{
CPerson p; HANDLE hMap;
hMap = ::CreateFileMapping((HANDLE) 0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
sizeof(CPerson),
"Person");
if (hMap == 0)
{
cout << " CreateFileMapping failed error #" << ::GetLastError() << endl;
return;
}
LPVOID pView;
pView = ::MapViewOfFile(hMap,
FILE_MAP_WRITE,
0,
0,
sizeof(CPerson));
if (pView == NULL)
{
cout << " MapViewOfFile failed error #" << ::GetLastError() << endl;
return;
} memcpy(&p, pView, sizeof(CPerson));
cout << p.m_szName << " # " << p.m_szSex << " # " << p.m_nAge << endl; ::UnmapViewOfFile(pView);
CloseHandle(hMap);
system("pause");
}