是什么原因引起“无法解析的外部符号IID_ICallbackWithNoReentrancyToApplicationSTA”错误?

时间:2019-02-20 04:54:37

标签: c++-winrt ppl

只需谷歌搜索或duckduckgoing

  

未解析的外部符号IID_ICallbackWithNoReentrancyToApplicationSTA

仅产生一次直接命中,甚至无法帮助报告问题的人员,因此我希望一些C ++ / WinRT人员遇到此问题。

虽然我不能共享所有源(大量交织的专有文件),但是我可以共享方案和代码更改的细目分类;另外,在任何地方都很少提及IID_ICallbackWithNoReentrancyToApplicationSTA。巧合的是,appears on GitHub是一些Kenny Kerr的东西。我遇到问题的项目是C ++ / WinRT项目,所以这似乎是一个相关的陷阱,尤其是因为提到了xlang,它应该是C ++ / WinRT的抽象。

场景:一个Core UAP C ++ / WinRT应用程序/服务正在使用C ++ / WinRT库。在构建应用程序/服务时尝试使用库创建的库时,构建会中断。

代码更改:我在库中实现了一些PPL任务,特别是一些concurrency::task<void>,它们对正在使用的C ++ / WinRT库中使用的新线程进行一些I / O。通过应用程序/服务。这是一个std :: thread,它使用lambda来获取对象的副本并执行I / O。像这样:

std::thread writer([content_vector, json_string, content_file_name, json_file_name]() {
        auto write_content = Helper_IO::Overwrite_Lines_Concurrent(content_file_name, content_vector);
        auto write_json = Helper_IO::Overwrite_File_Concurrent(json_file_name, json_string);
        write_content.get();
        write_json.get();
    });

Helper_IO::Overwrite_*_Concurrent都是静态的,并且都返回concurrency::task<void>

我尝试使用writer.detach()writer.join(),但结果相同。

1 个答案:

答案 0 :(得分:4)

使用“项目”>“属性”>“链接器”>“输入”>“其他依赖项”设置,添加uuid.lib

在某些背景下,名称以“ IID”开头的标识符为{guids}。数据,而不是代码。 MSDN文档通常不足以告诉您需要链接的库,而过于关注文档功能。我最喜欢的技术是使用类似grep的工具(我使用了Far文件管理器,有点难以推荐),然后在SDK的lib目录中搜索字符串。