在服务和应用程序之间共享内存,应用程序不能创建共享内存块,请大家帮忙,附代码

Javpp 2004-11-13 08:51:52
已经把服务设置为允许与桌面交互,如果先在应用程序中创建共享内存,然后启动服务,通讯没问题,但是如果先启动服务的,再启动应用程序创建共享内存,那么在CreateFileMapping中就会返回错误,无法创建,请高手指点

另:
服务的代码和变量
//---------------------------------------------------------------------------
HANDLE hShareMemoryFile;
LPCTSTR strShareMemName;
LPVOID lpData;
void __fastcall TService1::ServiceExecute(TService *Sender)
{
while (!Terminated)
{
strShareMemName = "MyShareMemName";

hShareMemoryFile = CreateFileMapping (
(HANDLE) 0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
1024,
strShareMemName
);

if (!hShareMemoryFile)
{
ShowMessage ("faile");
return;
}
else if(GetLastError () == ERROR_ALREADY_EXISTS)
{
//ShowMessage ("already exists");
//return;
}

lpData = MapViewOfFile (
hShareMemoryFile,
FILE_MAP_ALL_ACCESS,
0,
0,
0
);

if (lpData == NULL)
{
ShowMessage ("MapViewOfFile () failed");
return;
}
memset (lpData, 0, 1024);
memcpy (lpData, "hello", 1024);
Sleep (1000);
ServiceThread->ProcessRequests (false);
}
}
//---------------------------------------------------------------------------

应用程序的代码

HANDLE hShareMemoryFile;
LPCTSTR strShareMemName;
LPVOID lpData;
char tmp[1024];

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
//WM_RECEIVEDATAMSG = RegisterWindowMessage (SHAREDATA);
strShareMemName = "MyShareMemName";

hShareMemoryFile = CreateFileMapping (
(HANDLE) 0xFFFFFFFF,
NULL,
PAGE_READWRITE,
0,
1024,
strShareMemName
);

if (!hShareMemoryFile)
{
ShowMessage ("faile");
return;
}
else if(GetLastError () == ERROR_ALREADY_EXISTS)
{
//ShowMessage ("already exists");
//return;
}

lpData = MapViewOfFile (
hShareMemoryFile,
FILE_MAP_ALL_ACCESS,
0,
0,
0
);

if (lpData == NULL)
{
ShowMessage ("MapViewOfFile () failed");
return;
}

memcpy (tmp, lpData, 1024);

Memo1->Text = "";
Memo1->Text = tmp;
}
//---------------------------------------------------------------------------
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Javpp 2005-04-01
  • 打赏
  • 举报
回复
哎呀,没有啊
yifei1900 2005-03-31
  • 打赏
  • 举报
回复
我靠,
老宋啊,这个问题还没有解决啊?
sydt2000 2004-12-28
  • 打赏
  • 举报
回复
mark!
Javpp 2004-12-21
  • 打赏
  • 举报
回复
UP
BeRoy 2004-12-21
  • 打赏
  • 举报
回复
mark
h98458 2004-11-13
  • 打赏
  • 举报
回复
错误代码是什么?
铖邑 2004-11-13
  • 打赏
  • 举报
回复
会不会是因为服务的原因?
Javpp 2004-11-13
  • 打赏
  • 举报
回复
如果我先启动应用程序,创建共享内存,然后再启动服务,创建内存,那就没问题,但是顺序如果反过来,就会出问题,怎么回事呀?????????????
铖邑 2004-11-13
  • 打赏
  • 举报
回复
没看出有什么问题
Javpp 2004-11-13
  • 打赏
  • 举报
回复
就是应用程序中CreateFileMapping返回的句柄为0

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧