通用 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) 的相关文章

  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https
  • 从挂钩的 exe 获取详细的故障转储

    我正在尝试查找我的程序与游戏挂钩的问题 这是 VC 基本上我启动该程序 然后使用 SDL 连接到它 当我从 VS2010 运行代码时 一切正常 但是当我尝试从命令提示符运行时 我的程序可以启动游戏 但之后游戏立即崩溃 我正在查看 Windo
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 在哪里可以找到 Windows 7 UX 指南中推荐的图标/动画?

    Windows 7 UX 指南有很好的插图和图标示例 但我在 SDK 中确实找不到它们 他们藏在某个地方 还是找不到 如果您谈论的是常见的 UI 图标 那么您应该以编程方式获取它们 例如 您可以使用 var errIcon HICON be
  • C++使用太多CPU

    好的 我正在创建一个游戏 但它使用了太多的 cpu 但它没有使用太多的内存 cpu确实增加和减少 我的游戏中有太多计时器 当我不再使用计时器时 我会杀死计时器 因此这应该会导致问题 但我认为导致问题的原因是我的消息队列中有太多消息 我有一台
  • 非实例化模板成员的编译时错误而不是链接时错误

    我有模板类ItemContainer这实际上是整个容器系列的外观 具有不同的功能 如排序 索引 分组等 实施细节隐藏在cpp 使用 pimpl 习惯用法和显式实例化的文件 模板仅使用定义容器实际行为的众所周知的有限实现类集进行实例化 主模板
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • Windows 中的蓝牙 AVRCP 命令会触发哪些事件

    可以这么说 只是在做一些高级侦察 对于我的潘多拉客户 Elpis http elpis adamhaile net 我支持全局媒体键 键盘上的 MediaPlayPause MediaNext 等 并且我希望能够支持AVRCP http e
  • 在 Windows 中使用 PHP 创建受密码保护的 Zip 文件

    我正在 PHP 中创建给定文件的 zip 文件 下面是函数 function create zip file file name zip new ZipArchive zip name file name zip Zip name zip
  • 使用管理员权限打开cmd(Windows 10)

    我有自己的 python 脚本来管理我的计算机上的 IP 地址 它主要在命令行 Windows 10 中执行netsh命令 您必须具有管理员权限 这是我自己的计算机 我是管理员 运行脚本时我已经使用管理员类型的用户 Adrian 登录 我无
  • Windows 上使用 g++ 的 Makefile,链接库

    我已经厌倦了 MSVC 6 以及每个人总是告诉我它是一个蹩脚的编译器等等 所以现在我决定尝试使用 vim 加 g 和 makefile 这是我的问题 我有以下 makefile This is supposed to be a commen
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • 为什么 Windows 命令 DIR 在搜索 *.tif 文件时也会输出 *.tiff 文件?

    我想使用 Windows 命令DIR为了找到唯一TIF文件 即具有扩展名的文件 tif 因此我使用以下小批处理文件 for f delims a IN dir b a d s C wolter testversion input tif d
  • 如何处理来自单独线程的窗口消息?

    我希望启动一个单独的线程来处理窗口消息 通过阻塞 GetMessage 循环 但之后仍然在初始线程中创建窗口 在单独的线程中 一旦启动 我就会调用PeekMessage使用 PM NOREMOVE 确保消息队列存在 有必要吗 然后 Atta
  • std::to_string - 多个重载函数的实例与参数列表匹配

    counter is an int void SentryManager add std string name std shared ptr
  • 使用Windows 7计算器进行对数计算[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想使用Windows计算器在科学模式中为了求解一个非常基本的对数方程 但不幸的是 我无法做到这一点 问题是这样的 log 5 125 非常感谢您的帮
  • 为什么同一个curl命令在windows和linux下输出不同的东西?

    为什么同样的curl o file https www link com 命令输出不同的东西 例如 如果我运行命令curl o source txt https www youtube com playlist list PLIx6Fwnp
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 如果我使用客户端计算机上未安装的字体,会发生什么情况?

    有人可以告诉我 如果我在 WinForms 应用程序中使用目标计算机上不可用的字体 会发生什么情况 它是否使用同一系列的字体 只是 Sans Serif 还是其他字体 您的应用程序将回退到 Segoe UI Tahoma 然后是 MS Sa

随机推荐

  • .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