在服务和应用程序之间共享内存,应用程序不能创建共享内存块,请大家帮忙,附代码
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;
}
//---------------------------------------------------------------------------