Почему я не могу заставить работать этот фрагмент кода Microsoft Store? - PullRequest
0 голосов
/ 19 апреля 2020

Следуя различным примерам из MS и других стран, я написал этот фрагмент тестового кода ...

    [ComImport]
    [Guid("4AEEEC08-7C92-4456-A0D6-1B675C7AC005")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    private interface IInitializeWithWindow
    {
        void Initialize(IntPtr hwnd);
    }

и ..

    private async Task<bool> TestCode()
    {
        StoreContext Store = StoreContext.GetDefault();

        StoreAppLicense licence = await Store.GetAppLicenseAsync();

        bool trial = licence.IsTrial;
        bool full = licence.IsActive;

        IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)Store;
        initWindow.Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);

        StoreProductResult App = await Store.GetStoreProductForCurrentAppAsync();
        StoreProduct p = App.Product; // Title, price

        string title = p.Title;
        StorePrice price = p.Price;


        return true;
    }

И я называю это с помощью

bool x = TestCode().Result;

Все это компилируется и запускается, поэтому я, по-видимому, добавил все нужные ссылки и ссылки. Но при запуске строка:

IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)Store;

останавливается с исключением.

Невозможно привести объект типа 'Windows .Services.Store.StoreContext' к типу 'IInitializeWithWindow'

и я понятия не имею, почему.

  • Это C# программа с оболочкой UWP, создающая пакет MSIX.
  • Кажется, это довольно стандартный блок, адаптированный из различных примеров из MS.
  • В VS 2019 я связал программу с приложением магазина.
  • След ' Переменные 'и' full ', кажется, заполняются правильно.
  • Я вызывал это из разных мест: конструктор, случайная кнопка и т. д. c.

Мои вопросы ...

  1. Почему приведение вызывает исключение?
  2. Это старый способ делать вещи, которые больше не применяются?
  3. Связывает ли пакет из VS 2019 с приложением магазина вызов IInitalizeWithWindow с избыточностью?
  4. Как исправить код, чтобы «заголовок» и «цена» правильно отображались?

1 Ответ

0 голосов
/ 20 апреля 2020

Куча ударов головой, и у меня наконец-то все заработало ...

Учитывая, что в последние несколько дней не было комбинации / перестановки, которую я не пробовал, я не знаю, действительно, логика c сейчас работает, но все равно ..

В рамках проекта установщика UWP я связал проект с приложением в Магазине Microsoft, затем удалил строки:

[ComImport]
[Guid("4AEEEC08-7C92-4456-A0D6-1B675C7AC005")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
private interface IInitializeWithWindow
{
    void Initialize(IntPtr hwnd);
}

IInitializeWithWindow initWindow = (IInitializeWithWindow)(object)Store;
initWindow.Initialize(System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle);

Остальное сейчас работает просто отлично. Забавно, поскольку я уже связал приложение с магазином И удалил оскорбительные строки. Должно быть, на этот раз я сделал что-то немного другое!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...