如何在 Win32 C++控制台应用程序中调用 UWP 类库



我想在 win32 C++ 控制台应用程序中使用 Uri 调用 uwp 应用程序。我想的第一件事是使用LaunchUriAsync,但我在win32 C++中找不到Windows.System.Launcher.LaunchUriAsync。所以我想创建一个uwp类库来调用LaunchUriAsync,win32调用这个库。我找到了一个示例,现在我可以成功加载库,但 GetProcAddress 总是返回 null。不确定在 win32 控制台中调用 uwp 类库是否可行。请帮帮我。该项目正在 https://github.com/vincent1000/win32CallUwpLibrary 代码非常简单:

UWP 经典库:

namespace ExportedCodeSolution 
{
public class Class1
{
[DllExport(ExportName = "callUri", CallingConvention = CallingConvention.StdCall)]
static public async void callUri()
{
Console.WriteLine("call URI start");
await Launcher.LaunchUriAsync(new Uri("www.bing.com"));
}
}
}

和 Win32 控制台:

using CallUriFn = void(__stdcall*) ();
int main()
{
HMODULE mod = LoadLibraryA("ExportedCodeSolution.dll");
CallUriFn fn = reinterpret_cast<CallUriFn>(GetProcAddress(mod, "callUri"));
fn();
}

另外,还有其他方法可以在win32中调用LaunchUriAsync吗?我已经搜索了一些方法,但没有一种方法适合我。

解决方案很简单:只需从控制台应用程序调用 Launcher.LaunchUriAsync。最简单的方法是使用 C++/WinRT。假设您使用的是安装了 C++/WinRT 扩展的 Visual Studio,请创建一个"Windows 控制台应用程序 (C++/WinRT(">,并将向导生成的代码替换为以下内容:

#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.System.h>
using namespace winrt;
using namespace Windows::Foundation;
using namespace Windows::System;
int main()
{
init_apartment();
Uri uri(L"www.bing.com");
Launcher::LaunchUriAsync(uri).get();
}

这将编译,但由于"www.bing.com"不是有效的 URI,因此在运行时失败。这需要替换为有效的 URI(例如"https://www.bing.com"(。

最新更新