本篇文章介绍了如何写一个简单的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