我在 Delphi 程序的线程内使用 TIdHttp 和 TXMLDocument。 现在我想知道:
- 这些类是否使用 COM 对象,因此我需要在此线程中调用 CoInitialize 和 CoUninitialize?
- 如果是,我是否必须在执行方法主体或所有使用 TIdHttp 或 TXMLDocument 类的方法中使用这些函数?
最佳答案
TIdHTTP
没有 COM 依赖。TXMLDocument 可以依赖于 COM。在 Windows 上,开箱即用,它是 Microsoft 的 MSXML ActiveX 组件的包装器,该组件使用 COM。如果您使用另一个 DOM 供应商(例如,OmniXML,可从 XE7 获得),则没有 COM 依赖性。您可以通过设置
DefaultDOMVendor
来控制它全局变量。CoInitialize
和CoUninitialize
必须在线程上下文中调用一次。通常在TThread
的Execute()
方法中,如示例流程所示:procedure TMyThread.Execute; begin try CoInitialize(nil); try while not Terminated do begin DoWorkThatMayUseCOM; end; finally CoUninitialize(); end; except on E: Exception do // log exception Log(E); end; end;
关于multithreading - 在 Delphi 线程中使用 CoInitialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42904464/