Следуя различным примерам из 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.
Мои вопросы ...
- Почему приведение вызывает исключение?
- Это старый способ делать вещи, которые больше не применяются?
- Связывает ли пакет из VS 2019 с приложением магазина вызов IInitalizeWithWindow с избыточностью?
- Как исправить код, чтобы «заголовок» и «цена» правильно отображались?