我有兴趣覆盖 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#):
并将其添加到您的 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/