为了将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的明智方法吗?