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

kay*_*eck 1 ppl c++-winrt

只是谷歌搜索或duckduckgo'ing

未解析的外部符号 IID_ICallbackWithNoReentrancyToApplicationSTA

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

虽然不能共享所有源(大量交织的专有文件),但可以共享场景和代码更改的细目分类。而且,几乎没有IID_ICallbackWithNoReentrancyToApplicationSTA任何地方提及。巧合的是,它在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();
    });
Run Code Online (Sandbox Code Playgroud)

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

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

Han*_*ant 5

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

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

  • 遗憾的是,您无法从静态库项目中收到“无法解析的外部符号”错误。这是一个链接器错误。将更多内容从“输出”窗口复制/粘贴到您的问题中,以便我们看到正在链接的内容。 (3认同)