использование AppService в winrt / c ++ - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь использовать AppService в winrt / c ++, следуя примеру github в C ++ / Cx.Я всегда получаю результат "AppUnavailable".Я подтвердил, что подключаюсь к правильному имени службы и имею правильное имя семейного пакета.

Мой appxmanifest:

  <Extensions>
    <uap:Extension Category="windows.appService" EntryPoint="BlankApp5.Inventory">
      <uap3:AppService Name="com.microsoft.inventory" uap4:SupportsMultipleInstances="true"/>
    </uap:Extension>
  </Extensions>

Файл заголовка моего провайдера (в Mainpage.h):

namespace winrt::BlankApp5::implementation
{
class Inventory : public InventoryT<Inventory> {
public:
    virtual void Run(IBackgroundTaskInstance taskInstance);

private:
    BackgroundTaskDeferral mDef;
    AppServiceConnection appServiceConnection;
};

Мой файл MainPage.idl:

[default_interface]
runtimeclass Inventory : Windows.ApplicationModel.Background.IBackgroundTask
{
    void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance);
}

Во время генерации IDL я получаю следующее предупреждение:

[msg]A member name has been qualified with an interface name because name collisions occurred across interface members on a runtime class. [context]"Run" has been renamed as "BlankApp5.IInventory.Run" on runtime class "BlankApp5.Inventory"

Я немного обеспокоен тем, что Inventory :: Run удаляется компоновщиком, так как он не используется внутри сервис-провайдера, но японятия не имею, почему это не работает.Поставщик и клиент находятся в двух разных решениях и не имеют ссылок друг на друга, но я предполагаю, что это не нужно.Prodiver службы был развернут, но не запущен.Запуск не имеет значения.

1 Ответ

0 голосов
/ 24 декабря 2018

Вам не нужно объявлять void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance); в вашем файле idl, потому что вы реализуете IBackgroundTask, а void Run объявляется неявно.

...