c++ - 我需要在 C++ REST SDK 的什么地方调用 CoInitialize?

标签 c++ rest com casablanca

我需要使用 REST SDK 从一个简单的 REST 服务器调用一些 COM API .它类似于 BlackJack sample code .

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

我尝试了构造函数(示例中的 BlackJackDealer),但它不起作用:

BlackJackDealer::BlackJackDealer(utility::string_t url) : m_listener(url)
{
  CoInitialize(0);
  ...
}

最佳答案

C++ REST SDK 中的任务默认在 Windows 线程池上执行。您可以:

  • 在创建需要调用 COM 方法的任务时指定自定义调度程序(派生自 pplx::scheduler_interface)。参见 pplxinterface.h 接口(interface)声明和 windows_scheduler::schedule() inside pplxwin.cpp 了解如何在各种 Windows 上实现默认调度程序口味。
  • 手动将任何 COM 交互编码到您拥有和控制的线程(并调用了 CoInitialize)。这可能意味着拥有一个 std::function 对象的全局 vector ,您可以使用通常的 mutex/condition_variable 舞蹈来保护它。

即使您采用自定义调度程序路线,您也可能需要执行手动编码,但自定义调度程序将与现有的基于任务的 API 更好地互操作。

关于c++ - 我需要在 C++ REST SDK 的什么地方调用 CoInitialize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35893933/

相关文章:

java - Spring RESTful Webservice - 返回没有模型对象的 JSON

c# - 是否可以从 .NET 测试暴露于 COM 的程序集?

将单个语句包装在 try except block 中的 Python 干净方法

C++ Visual Studio 编译错误

c++ - C和C++有什么关系(比较技术性的做法)

C++ 打印链表

web-services - 可以通用地使用 REST 端点来支持不同资源的重用吗?

javascript - 如何在 Backbone.js 的 View 中获取模型属性?

c++ - COM 组件崩溃

c++ - 网络服务器的最佳跨平台解决方案?