В попытке включить функцию платформы 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 для начала?