描述:
因需要写了个win2000下的服务程序,系统启动时就开始运行。现想运用一个ocx调用服务程序中提供的功能,不知是否可行,如果可以应该怎么做。(注意,服务程序运行后,无窗口)
解决方案1:
1.服务程序用哪种 方式写的?
2.服务程序与OCX所在的进程如何通信?
和服务通讯,可以通过ControlService发送自定义的控制码。
也可以通过文件映射来做。
用文件影射的时候要注意CreateFileMapping的第二个参数不要为空,就是说需要设置一下权限。
还有文件映射的名称要全局。
// Wraps SetServiceStatus.
void SetTheServiceStatus(DWORD dwCurrentState, DWORD dwWin32ExitCode,
DWORD dwCheckPoint, DWORD dwWaitHint)
{
SERVICE_STATUS ss; // Current status of the service.
// Disable control requests until the service is started.
if (dwCurrentState == SERVICE_START_PENDING)
ss.dwControlsAccepted = 0;
else
ss.dwControlsAccepted =SERVICE_ACCEPT_STOP|SERVICE_ACCEPT_SHUTDOWN;
// Other flags include SERVICE_ACCEPT_PAUSE_CONTINUE
// and SERVICE_ACCEPT_SHUTDOWN.
// Initialize ss structure.
ss.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
ss.dwServiceSpecificExitCode = 0;
ss.dwCurrentState = dwCurrentState;
ss.dwWin32ExitCode = dwWin32ExitCode;
ss.dwCheckPoint = dwCheckPoint;
ss.dwWaitHint = dwWaitHint;
// Send status of the service to the Service Controller.
SetServiceStatus(ssh, &ss);
}
COM服务器