在MinGW中使用DLL包装Windows PackageManager

时间:2018-09-28 12:11:45

标签: c++ windows visual-c++ dll windows-package-manager

为了将Windows平台功能集成到其他跨平台应用程序中,我在Visual Studio中制作了一个单功能VC ++ DLL,该DLL使用Windows.Management.Deployment.PackageManager来获取有关所有已安装的Windows存储应用程序的一些详细信息

该函数可以作为独立应用程序正常工作,并且我可以使用MSVC成功构建DLL,该DLL与我的MinGW主应用程序正确链接(我可以很高兴地从DLL返回原始数据,等等)-但任何尝试执行函数的尝试包含与PackageManager相关的代码的dll中的错误使我的应用程序在运行时崩溃,并显示无用的代码-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相关的两行,程序运行正常并显示“ Hi!”。如果包含此程序,则在调用sayHi()时,程序将以代码-529697949崩溃。这两行本身都有可用的依赖项,不会引起异常。

关于如何进行调查的任何线索?我无法脱离该系统的任何事情都无法使我更进一步地发现问题。这是从简单的C ++ MinGW应用程序开始访问Windows.Management.Deployment.PackageManager的明智方法吗?

0 个答案:

没有答案