0

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

4

3 回答 3

5

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

于 2013-03-18T05:28:03.660 回答
2

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

ATL、MFC 之类的东西是原生 Win32 调用的包装器。在同一个应用程序中使用本机和包装器应该没有问题。

于 2013-03-18T03:26:19.127 回答
1

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

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

于 2013-03-18T03:07:58.050 回答