首页 > 解决方案 > 什么可能导致“无法解析的外部符号 IID_ICallbackWithNoReentrancyToApplicationSTA”错误?

问题描述

只是谷歌搜索或duckduckgo'ing

未解析的外部符号IID_ICallbackWithNoReentrancyToApplicationSTA

只带来一个直接命中,甚至对报告问题的人没有帮助,所以我希望一些 C++/WinRT 人遇到这个问题。

虽然我无法分享所有源代码(大量交织的专有文件),但我可以分享场景和代码更改的细分;此外,很少提及IID_ICallbackWithNoReentrancyToApplicationSTA任何地方。巧合的是,它在 GitHub 上出现了一些Kenny Kerr的东西。我遇到问题的项目是 C++/WinRT 项目,所以这似乎是一个相关的陷阱,特别是因为有人提到xlang它应该是 C++/WinRT 的抽象。

场景:一个 C++/WinRT 库正在被 One Core UAP 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()and writer.join(),但结果是一样的。

标签: c++-winrtppl

解决方案


使用 Project > Properties > Linker > Input > "Additional Dependencies" 设置,添加uuid.lib.

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


推荐阅读