我可以在本机C ++服务中使用ATL吗?

时间:2013-03-18 02:48:23

标签: c++ c windows winapi atl

如果我使用本机Windows API调用(如StartServiceCtrlDispatcher()等)而不是ATL服务(http://msdn.microsoft.com/en-us/library/74y2334x%28v=vs.80%29.aspx)来安装,卸载或控制我的服务并仍然使用某些ATL功能,它会搞砸一切?

3 个答案:

答案 0 :(得分:5)

在服务中使用ATL是安全的。需要注意的一点是,如果服务托管其他进程使用的COM服务器,请确保在Win2003 +上调用StartServiceCtrlDispatcher()之前调用CoRegisterClassObject(),否则CoRegisterClassObject()将失败。在早期的OS版本中,调用的顺序无关紧要。

答案 1 :(得分:2)

(我假设您正在使用本机代码,而不是dotnet。是这样的吗?)

像ATL这样的东西,MFC是本机Win32调用的包装器。不应该有问题 在同一个应用程序中使用本机和包装器。

答案 2 :(得分:1)

不,通过Native WinAPI调用控制您的服务应该没问题,并且仍然使用ATL来处理其他内容。我之前在生产代码中看到过这种情况。例如,WinAPI调用控制了服务,但使用了<atlenc.h>中的一些加密函数。

那就是说,我不能保证混合所有的ATL功能是安全的。您最好的选择是在使用之前阅读ATL功能的完整文档。