通用 Windows 平台应用程序和 C++/CLI (VS 2015 RC1)

2024-01-25

我有一些源自 .NET 系统命名空间类的 C++/CLI 代码。

有没有办法为通用 Windows 平台应用程序重用此代码?

我无法在 C++ 中获得对系统命名空间的引用,尽管在 C# 中这是可能的。看起来仅支持 C++/Cx 代码,而不支持托管 C++/CLI。


C++/CX 扩展的语法和关键字类似于C++/CLI 有很多。但这就是相似之处,它们没有任何共同点。 C++/CX 直接编译为本机代码,就像本机 C++ 一样。但 C++/CLI 被编译为 MSIL,即 .NET 的中间语言。它们的语法看起来非常相似,因为它们都解决相同的问题,将 C++ 与外部类型系统连接起来。如果是 C++/CLI,则为 .NET;如果是 C++/CX,则为 WinRT。

这就是不能使用 System 命名空间的基本原因,它是 .NET 命名空间。您可以使用std命名空间,以及Platform and WindowsWinRT 特定类型的命名空间。编译器无法导入 /ZW 编译选项有效的 .NET 参考程序集,只能导入 WinRT 元数据文件(文件扩展名为 .winmd 的文件)。它们是 COM .tlb 类型库文件格式的扩展,您之前必须使用 #import 指令导入这些文件格式。

这本身就是造成混乱的另一个主要来源,内部 .winmd 文件格式基于 .NET 元数据的格式。因此,大多数 .NET 反编译器都可以显示 .winmd 文件的内容。但同样只是表面上的相似,它与 .NET 程序集完全无关。它可以只包含声明,而不包含代码。最好将其与您在本机 C++ 项目中使用的 .h 文件进行比较。或者如果您以前接触过 COM,则可以使用 .tlb 文件。

了解 COM 的工作原理对于理解 COM 的含义非常有帮助。事实上,COM 是 WinRT 的核心,这也是 C++/CX 项目可以轻松地由用完全不同的语言(如 Javascript 或 VB.NET)编写的程序使用的基本原因。 WinRT 应用程序是actually进程外 COM 服务器。类库或 WinRT 组件实际上是进程内 COM 服务器。 COM 对象工厂的工作方式不同,范围仅限于包清单中指定的文件。 C++/CX 是语言投射它隐藏了 COM 以及您链接的实现平台命名空间的 C++ 库。如果程序员必须编写传统的 COM 客户端代码,WinRT 将胎死腹中。您仍然可以在本机 C++ 中使用,WRL 库几乎没有隐藏管道。

WinRT 很容易支持用 C# 或 VB.NET 等托管语言编写的代码,语言投影内置于框架中并且高度不可见。但 C++/CLI 则不然,这是一个结构限制。 Store/Phone/Universal 应用程序面向名为 .NETCore 的 .NET Framework 子集。如今,更广为人知的名称是 CoreCLR,这些部分都是开源的。它不支持模块初始值设定项,这对 C++/CLI 至关重要。


足够的介绍并得到答案:不,您的 C++/CLI 代码没有用处,您必须重写它。只要遵守 API 限制,您就可以很好地移植 C++/CLI 包装器所连接的本机 C++ 代码。您应该始终首先从那里开始,因为它很容易做到,并且会立即告诉您您的本机 C++ 代码是否正在使用verbotenapi 函数,这种函数会很快耗尽电池电量或违反沙箱限制。

The ref class然而,包装器必须进行重大调整。没有理由假设这将是一个主要障碍,但它仍然可能结构上相似。最大的限制是缺乏对实现继承的支持、COM 限制以及必须用等效的 C++ 代码替换使用 .NET Framework 类型的代码。典型的问题是往往有很多,原始作者通常会更喜欢非常方便的 .NET 类型而不是标准 C++ 库类型。 YMMV。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通用 Windows 平台应用程序和 C++/CLI (VS 2015 RC1) 的相关文章

随机推荐

  • .Net Windows 应用程序 WebBrowser / Google 地图 API v3

    我正在开发一个应用程序 用户可以在其中输入所需的地址 然后按按钮 该地址可以在WebBrowser net windows 应用程序中的控制 我知道你可以运行 javascriptWebBrowser通过使用WebBrowser1 Docu
  • 获取git命令列表

    我想为每个 git 命令创建一个别名 由于它们有很多 我想将它们放在一个列表中 然后在我的循环中循环 bashrc 有什么办法可以将它们写入 shell 脚本中吗 你可以试试这个 git help a 或者 您的 git 命令列在
  • Spring AOP Aspect 无法使用 Mockito 工作

    我有一个 Aspect它编织了我所有控制器操作方法的执行 当我运行系统时它工作得很好 但在单元测试中却不行 我按以下方式使用 Mockito 和 junit RunWith SpringJUnit4ClassRunner class Con
  • asp.net mvc url 路由

    如何映射诸如domain com 用户名之类的内容 问题是我认为 MVC 路由会寻找控制器来确定它应该如何处理映射请求 我对 ASP NET MVC 还很陌生 然而 根据迄今为止的教程 路由机制似乎相当僵化 它实际上非常灵活 我想如果您有更
  • 在 Typescript 中选择材质 UI

    我使用 Material UI select 创建了一个下拉菜单 它说 搜索依据 当我们点击它时 它会给我们一个列表 当我选择其中一个选项时 我想存储该选项并将 搜索依据 更改为所选选项 export default function Us
  • 销毁免费墙实例

    我正在使用jquery Freewall 插件 http vnjs net www project freewall 我想知道如何销毁它的一个实例 我写了一个小例子供大家理解 var startFreewall function funct
  • 将数据从一个子布局发送到 sitecore 中的另一个子布局

    我很难在 Sitecore 7 中构建过滤系统 我有 2 个子布局 位于页面的同一级别 子布局 A 是一个侧边栏 其中包含复选框列表 并具有一个用所选值填充列表的事件 子布局 B 显示一组项目 我想做的是将填充的列表从子布局 A 发送到子布
  • 在 proto 中从父文件夹导入到子文件夹

    我正在尝试将原型 defn 从父原型导入到具有以下文件夹结构的子原型中 parent proto sub child proto 父级 proto message Attribute 子原型 import parent proto mess
  • 在一列上使用 unique 并在另一列上执行 order by 会产生错误

    我有一张桌子 abc test 包含 n num k str 列 此查询不起作用 select distinct n num from abc test order by k str 但这有效 select n num from abc t
  • 请逐步解释递归[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 请逐步解释递归 public class TestClass private static void printit i
  • 成功安装 Python 自制程序后,运行“pip”会出现“找不到命令”

    前言 我对终端很不好 请耐心等待 当我跑步时pip我得到 zsh command not found pip 我已经安装了带有brew的Python 2 7 11 这应该允许pip工作 当我跑步时echo PATH I get usr lo
  • 如何判断一个点是否在一组区间内?

    我正在寻找最快的方法来确定线上的点是否在该线的子集中 我得到了一个整数 Point 并且我还有一个 列表 点 用整数表示 3 10 1000 等 间隔 我用 2 个整数表示 2 10 是从 2 到 10 的所有整数 50 60 等 在此示例
  • Android 图像视图矩阵缩放 + 平移

    我正在尝试手动获取以图像视图为中心并适合屏幕的图像 我需要用矩阵来完成 稍后我将动态更改矩阵变换 问题是我无法使图像在视图中居中 比例合适 这是代码 Compute the scale to choose this works float
  • npm 安装错误:rollbackFailedOptional:命令 npm install --save-dev @babel/core @babel/cli 的动词 npm-session a0d68

    当我尝试安装 babel 时 我不断收到此错误 rollbackFailedOptional verb npm session a0d68 节点版本为12 16 1 npm 版本是 6 13 4 我只是想安装 babel 并探索它是如何工作
  • 在 Laravel 中使用 number_format 方法

    我对 Laravel 和 Blade 模板相当陌生 谁能帮我展示如何做到这一点 我有这样的看法 foreach Expenses as Expense tr td Expense gt type td td Expense gt narra
  • 如何在命名空间范围内前向声明 constexpr 对象?

    在 clang 主干 上 我可以转发声明一个对象 稍后将用constexpr如下 Fwd declarations struct S extern const S s later definitions struct S constexpr
  • 使用 BLoC 处理导航的正确方法

    大家好 我正在使用 BLoC 来开发我目前正在开发的应用程序 但在某些情况下我一无所知 例如当您登录时触发 API 调用并自然等待结果时 我会发送加载状态并显示加载程序 但之后 这完成了如何处理例如导航到不同的屏幕 我目前有这样的事情 ty
  • 如何计算两个单词之间的“最短距离”?

    最近我参加了一次面试 我被要求编写一个算法来找到从特定单词到给定单词的 1 个字母变化的最小数量 即 Cat gt Cot gt Cog gt Dog 我不想要问题的解决方案 只是引导我了解如何在该算法中使用 BFS 根据这个拼字游戏列表
  • docusign 代表发送功能

    总的来说 我是 docusign 和 api 的新手 我已在 docusign 上手动创建了一个主帐户 现在我想使用此帐户创建新用户并使用代表发送功能 我已经浏览过这个 pdf http www docusign com sites def
  • 通用 Windows 平台应用程序和 C++/CLI (VS 2015 RC1)

    我有一些源自 NET 系统命名空间类的 C CLI 代码 有没有办法为通用 Windows 平台应用程序重用此代码 我无法在 C 中获得对系统命名空间的引用 尽管在 C 中这是可能的 看起来仅支持 C Cx 代码 而不支持托管 C CLI