混合托管/非托管 C++?

2023-12-22

我有一个用标准 C++ 编写的库。我还有一个用 C# 编写的 .Net Windows 窗体应用程序,它利用非托管库。

我知道我可以只使用 pinvoke,但我的 C++ 完全是面向对象的,我真的不想乱搞编组等。

有没有一种方法可以让我创建一个新的托管 C++ dll 项目,复制并粘贴我的头文件和代码文件,然后编译它并有权访问所有类?

或者我是否必须在托管 c++ 中创建一些引用类并将其连接到我的非托管类?我只是希望这件事尽可能简单。

Thanks!


即使在 C++/CLI 中,您仍然需要编写特定的 .NET 包装器,它们只是看起来不同。因此,能否将其放入 C++/CLI 项目中并重新编译并按原样使用它,答案是否定的。您仍然必须对数据进行编组(在这种情况下,您可能也可以使用 p/Invoke),或者您可以创建句柄并使用固定内存以使您的结构可用于托管代码。

我用两种方法完成了这件事:我用 CUDA C 编写了一个 GPU 库,并使用 p/Invoke 从 F# 调用它,我用 C++ 编写了一个视频处理库,并编写了一个精简的 C++/CLI 包装器,然后在.NET 应用程序。我认为 CLI 包装器更痛苦,但对于实时视频,我需要更少的延迟(更少的复制内存)。对于 GPU 项目,我更关心吞吐量。

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

混合托管/非托管 C++? 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le

随机推荐

  • 有关 mod_rewrite 和 mod_redirect 的帮助

    我的 htaccess 文件是 Redirect 301 http domain com news articles dtMain start 150 http domain com news articles Redirect 301 h
  • 如何使用 pandas read_xml API 读取大型 xml 文件?

    我正在尝试读取一个大的 XML 文件 文件大小约为 84 GB 来自 Post xml 的堆栈溢出数据转储 我注意到有 Pandas API pandas read xml link https pandas pydata org pand
  • 为什么内存块没有被垃圾收集器清理?

    package main import fmt net http runtime func handler w http ResponseWriter r http Request largeMemAlloc make int 100000
  • 创建具有像单例模式一样的可重用性的 CSOM ClientContext

    我在不同的用户操作上调用了多种方法客户端上下文 在每个方法执行上创建它都会导致性能问题 所以我将其添加为静态变量以实现可重用性 性能平均提高了 5 秒 但随后在某些方法中它开始给出随机问题 版本冲突 on 执行查询 但如果我删除静态和空检查
  • 将 GoDaddy 裸域添加到 Heroku 应用程序

    Heroku 自定义域 https devcenter heroku com articles custom domains 我已经设置了two我的 Heroku 应用程序的自定义域 example com example com hero
  • 在 PyTorch 中实现“无限循环”数据集和数据加载器

    我想实现一个无限循环数据集和数据加载器 这是我尝试过的 class Infinite Dataset def len self return HPARAMS batch size return 1 lt lt 30 This causes
  • sprintf 代表什么?

    我尝试在谷歌和维基百科上查找 但找不到答案 有谁知道 sprintf 或 printf 代表什么 是某个东西的缩写吗 Thanks 字符串打印格式 ed IE 使用给定格式打印到字符串
  • 使用匿名类型集合填充 WPF 中的 DataGrid

    我正在使用匿名类型的集合填充数据网格 我正在设置DataGrid s DataContext财产 并且没有错误 数据网格中没有显示任何内容 我尝试对定义的对象集合进行相同的操作 但再次没有显示任何内容 请您指导我该怎么做 Thanks ED
  • 奇怪的“字符串索引超出范围:0”错误

    我有一个巨大的应用程序 在某些时候 当涉及重定向时 我收到了这个奇怪的错误 Caused by java lang StringIndexOutOfBoundsException with message String index out
  • 编写电子邮件嗅探器

    我有兴趣编写一个电子邮件嗅探器 将通过基于网络的客户端发送的所有电子邮件保存到高清 但我不知道如何做到这一点 如何在加密之前捕获 HTTPS 邮件 我真的很感激一些有用的信息 我在网上找不到任何信息 有一个名为 HTTP Analyzer
  • 是否有 shim 或 polyfill 可以解决 Chrome 对数据列表的 512 限制?

    使用绑定到数据列表的输入标签实现了预输入 当用户滚动浏览条目时 Chrome 不会显示第 512 个匹配项之外的任何条目 整个数据列表仅包含大约 950 个条目 使用适用于 Windows 的 Chrome 版本 76 0 3809 100
  • 在大表中查找半径MySQL(纬度经度)内的点的最快方法是什么

    目前我有几个包含 100k 行的表 我正在尝试查找如下数据 SELECT SQRT POW 69 1 latitude 49 1044302 2 POW 69 1 122 801094 longitude COS latitude 57 3
  • ng-click 和 ng-touch 移动设备

    我有一个用 AngularJS 编写的 cordova 移动应用程序 在我的应用程序中添加 ng touch 会使某些 html 行为无法正常工作 此问题的一个示例是 当复选框包装在附有 ng click 的 HTML 元素中时 该复选框不
  • 隐藏的表单元素是否被提交?

    如果 jQuery 的toggle 用于 div 包含表单元素 这些表单元素是否会随表单一起提交 即使它们是隐藏的 我的代码 尽管这个特定问题可能不需要 cms loop title click function ctg this attr
  • 使用 C 的原始 libcurl JSON PUT 请求

    我目前正在编写一个类似 REST 的客户端 只需要执行 PUT 请求 Problem 运行该程序并没有在 URL 的 API 上给出正确的结果 我不知道为什么 使用curl easy perform curl 在调用时不会抛出错误 但 UR
  • 我应该在哪里设置 DataContext - 代码隐藏或 xaml?

    老实说 我搜索并阅读了所有似乎相关的 相关问题 我确实希望我没有 错过 其他地方的这个问题 但这里是 至少 有两种不同的方法来设置 DataContext 可以使用 XAML 也可以使用隐藏代码 什么是 最佳实践 为什么 我倾向于在 XAM
  • 如何在 MongoDB 上模拟“错误”事件

    我正在尝试为 NoFlo 组件 由同事编写 编写一个测试用例 该组件有一个 连接 输入端口和一个 错误 输出端口 例如 var self this a NoFlo Component var mongodb null self inPort
  • Meteor 允许更新插入吗?

    当我尝试更新插入集合时 在控制台中出现此错误 更新失败 访问被拒绝 受限集合中不允许更新插入 以下是我指定的允许规则 if Meteor isClient Meteor subscribe customers customers Custo
  • WinForms - Form.DoubleBuffered 属性是否影响放置在该窗体上的控件?

    Form具有 DoubleBuffered 属性 布尔值 继承自 Control 如果将此设置为 true 则放置在窗体上的所有控件是否都会由于位于窗体上而以双缓冲方式绘制到屏幕上 或者您需要担心它们自己的 DoubleBuffered 属
  • 混合托管/非托管 C++?

    我有一个用标准 C 编写的库 我还有一个用 C 编写的 Net Windows 窗体应用程序 它利用非托管库 我知道我可以只使用 pinvoke 但我的 C 完全是面向对象的 我真的不想乱搞编组等 有没有一种方法可以让我创建一个新的托管 C