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