本篇文章介绍了如何写一个简单的DCOM服务端(NT服务模式)。
1、VC新建工程,ATL->ATL Project(名称为ATLService)->类型选择Service(EXE)->Finish
2、工程视图,ATLService工程,右键->Add->Class->ATL->ATL Simple Object->类名为JustATestSvr,ProgID为ATLService.JustATestSvr
3、切换到类视图,ATLService项目下的IJustATestSvr接口上右键Add Method
名称:Add
参数1:[in]LONG a
参数2:[in]LONG b
参数3:[out,retval]LONG* c
4、类视图,ATLService项目下的IIJustATestSvr接口上右键Add Method
名称:SayHiTo
参数1:[in]BSTR someOne
参数2:[out,retval]BSTR* retValue
5、打开IJustATestSvr.cpp完成两个函数
STDMETHODIMP CJustATestSvr::Add(LONG a, LONG b, LONG* c)
{
// TODO: Add your implementation code here
*c = a+b;
return S_OK;
}
STDMETHODIMP CJustATestSvr::SayHiTo(BSTR someOne, BSTR* retValue)
{
// TODO: Add your implementation code here
CComBSTR sResult("Hi ");
CComBSTR sName(someOne);
CComBSTR sMark("!");
sResult.AppendBSTR(sName);
sResult.AppendBSTR(sMark);
*retValue = sResult.Copy();
return S_OK;
}
6、编辑JustATestSvc.rgs,在TypeLib一行前,增加这样一行
val AppID = s '%APPID%'
这是MS的一个大bug,浪费了我好几个小时。
7、编译
8、注册
ATLService.exe /service
9、运行
net start ATLService
10、停止
net stop ATLService
11、反注册
ATLService.exe /unregserver