我可以在本地c++服务中使用ATL吗?

Can I use ATL in a native C++ service?

本文关键字:ATL 服务 c++ 我可以      更新时间:2023-10-16

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

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

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

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

不,通过本机WinAPI调用来控制你的服务应该是好的,并且仍然使用ATL来处理其他事情。我以前在生产代码中看到过这种情况。例如,WinAPI调用控制服务,但使用了<atlenc.h>中的一些加密函数。

也就是说,我不能保证混合使用所有的ATL函数是安全的。最好的方法是在使用ATL函数之前阅读它的完整文档。