我需要使用 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()
insidepplxwin.cpp
了解如何在各种 Windows 上实现默认调度程序口味。 - 手动将任何 COM 交互编码到您拥有和控制的线程(并调用了
CoInitialize
)。这可能意味着拥有一个std::function
对象的全局 vector ,您可以使用通常的mutex
/condition_variable
舞蹈来保护它。
即使您采用自定义调度程序路线,您也可能需要执行手动编码,但自定义调度程序将与现有的基于任务的 API 更好地互操作。
关于c++ - 我需要在 C++ REST SDK 的什么地方调用 CoInitialize?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35893933/