Использование DLL, упаковывающих Windows PackageManager в MinGW - PullRequest
0 голосов
/ 28 сентября 2018

В попытке включить функцию платформы Windows в другое кроссплатформенное приложение, я создал однофункциональную библиотеку VC ++ DLL в Visual Studio, которая использует Windows.Management.Deployment.PackageManager, чтобы получить некоторые сведения обо всех установленных приложениях Windows Store..

Функция отлично работает как отдельное приложение, и я могу успешно собрать DLL с MSVC, которая правильно связывается с моим основным приложением MinGW (я могу с радостью вернуть примитивные данные из dll и т. Д.) - но любая попыткавыполнение функции из dll-кода, содержащего код PackageManager, приводит к сбою моего приложения во время выполнения с бесполезным кодом -529697949.

Вот несколько минимальных блоков кода, которые реплицируются:

main.cpp в главномapplication:

#include <QCoreApplication>
#include "mylib/WindowsAppsLib.h"
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    auto hi = (Helpers::sayHi());

    qDebug() << (hi);

    return a.exec();
}

dll header:

#pragma once
#define WINDOWSAPPSLIB_API __declspec(dllexport)

namespace Helpers
{ 
extern "C" WINDOWSAPPSLIB_API const char* sayHi();
}

dll source:

#include "stdafx.h"
#include <sddl.h>
#include <collection.h>
#include "WindowsAppsLib.h"
#include <windows.h>

#using <Windows.winmd>
using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace std;

const char* Helpers::sayHi()
{
    auto packageManager = ref new Windows::Management::Deployment::PackageManager();
    auto packages = packageManager->FindPackages();

    return "Hi!";
}

Без двух строк, связанных с диспетчером пакетов, программа работает нормально и печатает "Привет!".При включении программа вылетает с кодом -529697949, как только вызывается sayHi ().Сами по себе две строки имеют свои зависимости и не вызывают исключений.

Есть какие-нибудь подсказки о том, как я могу продолжить расследование этого?Ничто из того, что я смог вытащить из этой системы, не приблизило меня к выявлению проблемы.Является ли это разумным способом для доступа к Windows.Management.Deployment.PackageManager из простого приложения C ++ MinGW для начала?

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