В попытке включить функцию платформы Windows в другое кроссплатформенное приложение, я создал однофункциональную библиотеку VC ++ DLL в visual studio, которая использует Windows.Management.Deployment.PackageManager для получения некоторых сведений обо всех установленных приложениях хранилища Windows.
Функция прекрасно работает как отдельное приложение, и я могу успешно построить DLL с MSVC, которая правильно связывается с моим основным приложением MinGW (я могу с радостью вернуть примитивные данные из dll и т. Д.) — но любая попытка выполнить функцию из dll содержащий код, относящийся к PackageManager, приводит к сбою приложения во время выполнения с помощью бесполезного кода -529697949.
Вот некоторые минимальные блоки кода, которые копируются:
main.cpp в основном приложении:
#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:
#pragma once
#define WINDOWSAPPSLIB_API __declspec(dllexport)
namespace Helpers
{
extern "C" WINDOWSAPPSLIB_API const char* sayHi();
}
источник dll:
#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!";
}
Без двух строк, касающихся packagemanger, программа работает нормально и печатает «Привет!». При включении программа вылетает с кодом -529697949, как только вызывается sayHi (). Две строки сами по себе имеют свои зависимости и не вызывают исключений.
Любые подсказки о том, как я мог бы продолжить расследование этого? Ничто из того, что я смог вытащить из этой системы, не приблизило меня к выявлению проблемы. Является ли это разумным способом доступа к Windows.Management.Deployment.PackageManager из простого приложения C ++ MinGW для начала?
Задача ещё не решена.
Других решений пока нет …