我需要在C++ REST SDK中调用CoInitialize

Where do I need to call CoInitialize in the C++ REST SDK?

本文关键字:SDK 调用 CoInitialize REST C++      更新时间:2023-10-16

我需要使用 REST SDK 从简单的 REST 服务器调用一些 COM API。它类似于二十一点示例代码。

每当我尝试创建 COM 对象时,都会收到一个异常,指出尚未调用CoInitialize。但是,我究竟在哪里可以初始化处理 REST 请求的线程?我找不到任何文档。

我尝试了构造函数(示例中的二十一点经销商),但这不起作用:

BlackJackDealer::BlackJackDealer(utility::string_t url) : m_listener(url)
{
  CoInitialize(0);
  ...
}
默认情况下,

C++ REST SDK 中的任务在 Windows 线程池上执行。与其尝试将线程池线程联接到 STA(应被视为反模式),不如执行以下操作之一:

  • 在创建需要调用 COM 方法的任务时指定自定义计划程序(派生自 pplx::scheduler_interface)。有关接口声明,请参阅pplxinterface.hpplxwin.cpp内部windows_scheduler::schedule(),了解如何在各种 Windows 风格上实现默认计划程序。
  • 手动将任何 COM 交互编送到你拥有和控制(并已调用CoInitialize)的线程。这可能意味着拥有std::function对象的全局矢量,您可以使用通常的mutex/condition_variable舞蹈来保护这些对象。
即使您采用自定义计划程序

路由,也可能需要执行手动编组,但自定义计划程序将与现有的基于任务的 API 更好地互操作。