【问题标题】:How to reference Windows Runtime classes in a Static Library?如何在静态库中引用 Windows 运行时类?
【发布时间】:2016-06-13 05:53:18
【问题描述】:

我是 Universal Windows Platform 上的 C++ 编程新手,我有一个简单的问题:我在 Visual Studio 2015 中创建了一个 Static Library (Universal Windows) 项目但我无法在该项目中使用那些 Windows 运行时类,例如 Windows::UI::Core::CoreWindow

我想我需要添加包含指令或对库的引用,但我找不到相关信息。我试图搜索 MSDN,但只找到了两个页面,其中提到了命名空间 defaultCollections 的两个标题。

有人知道如何在静态库中引用 Windows 运行时类吗?

【问题讨论】:

  • 您是否在项目中添加了对 Windows.md 文件的引用?你得到哪个错误。我在 UWP 应用程序中使用了一个静态库,它可以工作,但应该应用一些设置。让我知道您遇到了哪个错误
  • 没有。我的项目中没有 Windows.md 文件。我在哪里可以找到有关它的信息?我得到的错误只是那些命名空间和类是未定义的。
  • 我想做的是创建一些 OpenGLES 代码的静态库,它需要 Windows::UI::Core::CoreWindow 来创建表面对象,但不必创建窗口。因此,这就像在 OpengGLES2 应用程序(Android、iOS、Windows Universal)的解决方案中,将 OpenGLES 代码从 xxx.WindowsUniversal.Application 中的 App.cpp 移动到库中。

标签: c++ win-universal-app


【解决方案1】:

您需要使用 /ZW 选项构建项目以允许在 UWP 静态库中使用 Windows 运行时扩展:

  1. 在解决方案资源管理器中右键单击项目
  2. 点击属性
  3. 选择 C/C++ -> 常规
  4. 将“使用 Windows 运行时扩展”设置为“是(/ZW)”
  5. 点击确定

应用此选项后,对 Windows 运行时扩展的引用出现在项目的引用下,您可以使用 Windows 运行时类。

但是,您可能会在构建库时看到链接器警告:

Debug\pch.obj : 警告 LNK4264: 归档目标文件编译 /ZW 进入静态库;请注意,在创作 Windows 运行时 不建议与静态库链接的类型 如果您使用的是已发布的链接器,则包含 Windows 运行时元数据 在 VS 2015 更新 2 之前

我测试了该场景,它在调试模式下运行良好,但是,我不确定这是否是最好的方法,因为与其他类型的 UWP 项目不同,默认情况下 /ZW 选项是关闭的。

MSDN:

您可以在 UWP 项目中使用本机 C++ 静态库,但是 有一些限制和限制需要注意。从阅读开始 本主题关于 C++/CX 中的静态库。您可以访问本机 来自 UWP 应用的静态库中的代码,但它不是 建议在这样的静态库中创建公共引用类型。如果 您使用 /ZW 选项编译静态库,图书馆员 (实际上是伪装的链接器)警告:

也许您应该考虑将所有代码封装在 Windows 运行时组件或 UWP DLL 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多