winapi - 如何覆盖启动 WinUI 3.0 桌面应用程序

标签 winapi winui-3

我有兴趣覆盖 WinUI 3.0 桌面应用程序中的入口点来控制消息泵。看起来并不像重新定义静态函数那么简单

static auto Start(winrt::Microsoft::UI::Xaml::ApplicationInitializationCallback const& callback);

在应用程序子类中。如果入口点仍然不是 wWinMain,我什至有点困惑,因为如果是,则解决方案中没有定义它。我还没有尝试将链接器选项设置为其他入口点,因为我看到提到这样做会跳过静态成员预处理,并且我想在开始乱搞之前我会找出这意味着什么。那么如何捕获入口点呢?

最佳答案

这可能是由您使用的工具生成的。如果您不使用任何特殊工具或/并且选择了一个精美的编译器,您应该能够自己完成。

如果您选择 Microsoft 工具,通常 C++/WinRT使用 C++ 和 Visual Studio,则 WinMain 可能会在名为 App.xaml.g.hpp 的文件中生成(要找到该文件,只需开始调试,它应该会让您正确进入该 WinMain)。

要使用您自己的,请定义 DISABLE_XAML_GENERATED_MAIN某处(注意它也适用于 C#):

enter image description here

并将其添加到您的 appp.xaml.cpp 文件中:

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd)
{
  winrt::init_apartment(winrt::apartment_type::single_threaded);

  // put your fancy code somewhere here
  ::winrt::Microsoft::UI::Xaml::Application::Start(
    [](auto&&)
    {
      // and here (default is like this)
      // ::winrt::make<::winrt::MyNamespace::MyApp::implementation::App>();
    });

  return 0;
}

关于winapi - 如何覆盖启动 WinUI 3.0 桌面应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72699376/

相关文章:

delphi - 如何在不更改有效文本宽度的情况下绘制缩放文本?

windows - 你如何使用输入法?

c++ - 显式 DLL 1 函数失败

WinAPI - 如何解释位掩码 0 (LMShare.h/STYPE_DISKTREE)?

c# - 与 WinUI3 一起使用时,为什么 .NET 通用主机不停止?

c# - 从 UWP 中的 IconElement 或 IconSourceElement 派生

c++ - 被 BEGIN_MSG_MAP 和 BEGIN_MSG_MAP_EX 搞糊涂了

c# - 将 System.Drawing.Icon 转换为 Microsoft.UI.Xaml.ImageSource

c# - 如何在WinUI 3中手动切换颜色主题?

c# - WInUI 3.0 桌面 - 尝试导航时出现异常崩溃