Что может быть причиной ошибки «неразрешенный внешний символ IID_ICallbackWithNoReentrancyToApplicationSTA»? - PullRequest
0 голосов
/ 20 февраля 2019

Просто googling или duckduckgo'ing

неразрешенный внешний символ IID_ICallbackWithNoReentrancyToApplicationSTA

вызывает только один прямой удар, и это даже не помогает человеку, сообщающемупроблема, поэтому я надеюсь, что некоторые C ++ / WinRT люди сталкиваются с этим вопросом.

Хотя я не могу поделиться всем источником (тоннами переплетенных проприетарных файлов), я могу поделиться сценарием и разбивкой того, чтоизменения кода были;кроме того, очень мало упоминаний о IID_ICallbackWithNoReentrancyToApplicationSTA в любом месте.По совпадению, это появляется на GitHub для некоторых Кенни Керр вещей.Проект, с которым у меня проблемы, - это проект C ++ / WinRT, так что это похоже на уловку, тем более что есть упоминания xlang, который, как предполагается, является абстракцией C ++ / WinRT.

Сценарий : Библиотека C ++ / WinRT используется приложением / службой One Core UAP C ++ / WinRT.Сборка прерывается при попытке использовать библиотеку, созданную библиотекой, при создании приложения / службы.

Изменения кода : я реализовал некоторые задачи PPL в библиотеке, в частности некоторые concurrency::task<void>, которыевыполните некоторые операции ввода-вывода в новом потоке, используемом в C ++ / WinRT lib, который используется приложением / службой.Это std :: thread, который использует лямбду, которая берет копии объектов и выполняет ввод / вывод.Примерно так:

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 голосов
/ 27 февраля 2019

Используйте «Проект»> «Свойства»> «Компоновщик»> «Вход»> «Дополнительные зависимости», добавьте uuid.lib.

Некоторые фоновые идентификаторы, имена которых начинаются с «IID»: {guids}.Данные, а не код.Документация MSDN часто не подходит для того, чтобы указывать, какую библиотеку вам нужно связать, слишком сосредоточена на функциях документирования.Мой любимый метод - использовать инструмент, похожий на grep (я использую файловый менеджер Far, немного неясный, чтобы рекомендовать) и искать строку в каталоге lib SDK.

...