繁体   English   中英

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

[英]How to Override Start WinUI 3.0 Desktop Application

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

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

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

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

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

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

在此处输入图像描述

例如,将此添加到您的 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM