В ATL 7.0 уже реализованны эти вещи Лучше бы было написать статью как делать на новом с использованием аттрибутов и какие новые баги появились чем переписывать старое По моему статьи Федотова было вполне достаточно(лично я научился делать сервисы именно по этой статье)
Здравствуйте, Алексей Ширшов, Вы писали:
АШ>Статья:
АШ>Авторы:
АШ> Алексей Ширшов
АШ>Аннотация:
АШ>В этой статье вашему вниманию предлагаются несколько классов, которые позволяют быстро и безболезненно создавать системные службы (также называемые сервисами) Windows 2000.
я не могу скомпилять код, нет типа ULONG_PTR, в мсдн он приводится как типы виндовса, внизу — платформ сдк февраль 2003. в моем платформ сдк 2002 этот тип используется, но определения нет (в файлах смотрел).
где этот тип взять или хоть скажите, как он определяется
Добавил в CServiceContext:
CServiceContext() : m_hThread(NULL), m_iocpThread(0)
{ fAllowPauseCont = fAllowParamChange = false;
fInteractWithDesktop = false;
fOwnProcess = true;
}
HANDLE m_hThread;
friend unsigned __stdcall ThreadProc(LPVOID lpComp);
CIOCP m_iocpThread;
и такой код:
void CServiceContext::OnServiceStart()
{ // стартуем поток
DebugOut(L"Стартуем поток");
m_hThread = (HANDLE)_beginthreadex(NULL, 0, &ThreadProc, this, 0, 0);
}
#define CK_QUIT 1
void CServiceContext::OnServiceStop()
{ DebugOut(L"Остановка сервиса");
if (m_hThread)
{ m_iocpThread.PostStatus(CK_QUIT);
CloseHandle(m_hThread);
m_hThread = NULL;
}
}
unsigned __stdcall ThreadProc(void* lpParam)
{ DebugOut(L"Начало работы ThreadProc");
CServiceContext *m_pSC = (CServiceContext*)lpParam;
ULONG_PTR pCompKey;
DWORD dwNumBytes;
OVERLAPPED* pov;
while (true)
{ m_pSC->m_iocpThread.GetStatus(&pCompKey, &dwNumBytes, &pov);
switch (pCompKey)
{ case CK_QUIT:
MessageBox(NULL, L"true", L"ThreadProc", MB_ICONERROR | MB_OK | MB_SERVICE_NOTIFICATION);
return 1;
default:
MessageBox(NULL, L"false", L"ThreadProc", MB_ICONERROR | MB_OK | MB_SERVICE_NOTIFICATION);
}
}
return 0;
}
Но почему-то ни один в ThreadProc не выскакивает

?