尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
I'm getting unresolved external symbol winrt_make_* when trying to compile C++/WinRT blank app from XamlApplication
我正在尝试按照这里的教程进行操作:UWP Xaml Hosting API。
我在本教程的部分应该创建一个定义XamlApplication
应用程序的空白应用程序。我在标题 (.h( 中将其定义为:
#pragma once
#include "App.xaml.g.h"
namespace winrt::UI_Host::implementation
{
struct App : Microsoft::Toolkit::Win32::UI::XamlHost::XamlApplicationT<App>
{
App();
~App();
};
}
我的.cpp文件将其定义为:
#include "pch.h"
#include "App.h"
using namespace winrt;
using namespace Windows::ApplicationModel;
using namespace Windows::ApplicationModel::Activation;
using namespace Windows::Foundation;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Navigation;
using namespace UI_Host;
using namespace UI_Host::implementation;
winrt::UI_Host::implementation::App::App()
{
Initialize();
}
winrt::UI_Host::implementation::App::~App()
{
Close();
}
如果我离开我的.IDL 文件为:
namespace UI_Host{}
它编译得很好,但我不能在我的 Win32 程序中使用App
类。所以我将 IDL 文件更改为:
namespace UI_Host
{
[default_interface]
runtimeclass App : Microsoft.Toolkit.Win32.UI.XamlHost.XamlApplication
{
App();
}
}
但现在它无法编译。编译时得到的错误是这样的:
>module.g.obj : error LNK2019: unresolved external symbol "void * __cdecl winrt_make_UI_Host_App(void)" (?winrt_make_UI_Host_App@@YAPEAXXZ) referenced in function "void * __cdecl winrt_get_activation_factory(class std::basic_string_view<wchar_t,struct std::char_traits<wchar_t> > const &)" (?winrt_get_activation_factory@@YAPEAXAEBV?$basic_string_view@_WU?$char_traits@_W@std@@@std@@@Z)
有谁知道为什么?
C++/WinRT 2.0 引入了重大更改以支持优化组件。当-optimize
传递到cppwinrt.exe时使用它。默认情况下,为新项目启用此选项。
中断性更改要求组件作者将生成的实现文件#include
到实现该特定类型的编译单元中。在您的情况下,您需要#include "App.g.cpp"
App.cpp(确保在头文件App.h之后#include
它(。
若要允许代码使用和不使用-optimize
标志进行编译,可以有条件地包含App.g.cpp:
#include "App.h"
#if __has_include("App.g.cpp")
# include "App.g.cpp"
#endif
为了便于理解课程,您可以阅读 Raymond Chen 的博客文章,标题为"为什么我的 C++/WinRT 项目收到"未解析的外部符号void* __cdecl winrt_make_YourNamespace_YourClass(void)
"形式的错误?。
相关文章:
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 将无符号char*转换为std::istream*C++
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 使用gcc从静态链接的文件中查找可选符号
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- VC++本机单元测试,找不到调试符号
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 检查TCHAR数组输入是否为带符号整数C++
- 用符号版本替换对函数的所有调用
- make 不会生成调试符号
- 有符号和无符号整数表达式之间的比较在make install时发出警告
- Sscanf make忽略所有符号,包括换行符