如何在 .NET 应用程序中使用 C++ 项目?

2024-01-11

我是一名普通的 .NET 开发人员,旨在将 C++ 库集成到 .NET 项目中。我有一些想法,但由于我总体上是 C++ 新手,所以我不知道我正在尝试使用的技术的局限性。 C++ 项目本质上是一个快速声音渲染器,可以使用一堆不同的后处理技巧来播放多轨音频文件。所有这些都很酷,但考虑到我想集成一个简单的 .NET WinForms 应用程序,事情开始看起来很混乱。

  1. 首先,C++ 项目没有 .NET 绑定或 ActiveX/COM 集成。它是一个简单的 MS VC++ 9 项目。如果我要在 .NET 应用程序中处理该项目,我必须以某种方式界面与它,即。创建类实例、设置属性、调用方法、编组数据输入和输出等。

  2. 其次,它构建为作为独立的 Windows 应用程序运行,并使用 MS Windows API 管理自己的窗口。这很好,但不知何故我需要 .NET VMrunning在后台管理节目并运行我所有的 C# 代码。我不编写 C++,因此我需要坚持使用 C# 围绕该库构建应用程序。

  3. 第三,无论我是否与 C++ lib 在同一进程中运行,我都需要一种方法构建/接口/调试这两个独立的应用程序就像是一个应用程序一样。除了编写了几个用于高性能数据操作的 C++ DLL 之外,我没有 C++ 编程背景。

所以,有很多问题,不知道如何开始!

  • 我可以完全编译这个库并将其放入 VC EXE 中,但是我该怎么办共同编译我的 .NET 代码可以写入吗?或者,如何将 C++ 代码编译到 .NET EXE 中,以便它在托管环境中运行?请注意,它不是为此而设计的,如果我尝试更改太多,可能会出现错误。

  • 主要问题是界面用它。我如何expose一些可以从 .NET 访问的 C++ 类?我确切地知道我需要哪些类,并且只需要 .NET 中提供的几十个类及其相关方法/属性。我不介意手写包装类在 .NET 中帮助 .NET VM 了解来回传输的字节的类结构。我希望我可以直接在托管环境中使用 C++ 对象,这样我的大部分代码就可以保留在 .NET 中。

  • 即使我将它作为独立的应用程序运行,我是否必须求助于套接字或其他东西来与其通信?这绝对是最糟糕的情况,我会尽一切努力避免这种情况。

感谢任何帮助或指示,我希望我清楚自己和我手头的任务,并且我的问题足够具体且可以回答。谢谢你的帮助!

Edit:如果我编写包装类或生成它们,我可以使用P/Invoke http://www.codeproject.com/Articles/14180/Using-Unmanaged-C-Libraries-DLLs-in-NET-Applicatio创建类实例并调用它们的方法并让它们在后台运行本机 C++ 代码?此类 C++ 对象的内存将在哪里存储和管理?在 .NET 堆内还是在 .NET 堆外?


您可以将托管 C++ (C++/CLI) 包装器编写为非托管 C++ 代码。这将是最灵活的解决方案。基本上,您用 C++ 编写一个 .NET 程序集,该程序集公开调用您的非托管代码的托管类。然后您可以从 C# 项目中引用该程序集。

有一篇非常基本的文章如何做到这一点:http://www.windowsdevcenter.com/pub/a/dotnet/2004/03/29/mcpp_part3.html http://www.windowsdevcenter.com/pub/a/dotnet/2004/03/29/mcpp_part3.html

这也可能有帮助:http://www.multicoreconsulting.co.uk/blog/c-snippets/how-to-call-unmanagement-cplusplus-from-csharp/ http://www.multicoreconsulting.co.uk/blog/c-snippets/how-to-call-unmanaged-cplusplus-from-csharp/

以及 MSDN 文章Visual C++ 中的 .NET 编程 http://msdn.microsoft.com/en-us/library/68td296t.aspx.

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

如何在 .NET 应用程序中使用 C++ 项目? 的相关文章

随机推荐

  • Flask-SQLAlchemy 的隔离级别

    我无法理解数据库隔离级别如何与 Flask SQLAlchemy 配合使用 尤其是如何really提交更改或关闭会话 这是我的问题的背景 我正在将 Flask SQLAlchemy 用于带有 MySQL 数据库的 Flask 项目 这是我的
  • “/”应用程序中的服务器错误。网络平台

    问候 我使用 ASP Net 3 5 和 C 开发了一个网站 它与 Visual Stdio 2010 配合良好 我将我的网站上传到我的域的公共文件夹下 我第一次在我的网站上进行午餐测试 http wecoders com Habib cu
  • Python 列表([]) 和 []

    from cs1graphics import from math import sqrt numLinks 50 restingLength 20 0 totalSeparation 630 0 elasticityConstant 0
  • 使用 bootstrap 3.37 header 下拉菜单并将 jquery 翻译为 knockoutJS

    我正在查看这篇文章 以在我的 mvc5 knockoutjs 解决方案中应用带有下拉菜单的标题菜单 https jdmdigital co news codex bootstrap 3 secondary dropdown menu htt
  • “gem update --system 在 Debian 上被禁用”错误

    当我尝试更新 ruby gems 通过运行 gem update system 时 出现此错误 ERROR While executing gem RuntimeError gem update system is disabled on
  • 每个目标都有不同的故事板本地化

    我有一个有 3 个目标的项目 每个目标只需要支持一种语言 但每个目标的语言都不相同 目前我有 目标 1 西 目标 2 西 目标 3 点 我的大部分字符串都在 Localized strings 文件中 我只是为每个目标指定一个不同的文件 然
  • Xamarin 表单中的轮播视图自动滑动

    我的页面底部有一个轮播视图 现在我希望图像每 2 秒自动滚动一次 我已经实现了相同的并且工作正常 Device StartTimer TimeSpan FromSeconds 2 gt SlidePosition if SlidePosit
  • 关于硬链接

    有人可以解释一下为什么内核不允许我们建立到目录的硬链接吗 无论是因为它打破了文件系统有向无环图结构的规则 还是因为其他原因 如果允许的话还会出现什么其他并发症 回到第 7 版 或版本 7 UNIX 时代 没有系统调用mkdir 2 and
  • 如何从具有字典列表的 json 将数据集加载到 pytorch torchtext.data.TabularDataset 中?

    我有一个字典列表如下 text The Fulton County Grand tags AT NP TL NN TL JJ TL text The jury further said tags AT NN RBR VBD 每个字典的每个值
  • 正则表达式查找一对周围数字不同的相邻数字

    我想找出是否有两个相邻的相同数字 并且这对数字前后的数字不同 例如 123456678 应该匹配 因为有一个双 6 1234566678 不应匹配 因为不存在具有不同周围数字的双精度数 12334566 应该匹配 因为有两个 3 到目前为止
  • 在 Gradle 构建脚本中访问 Teamcity 构建号

    如何在 Teamcity 执行的 Gradle 脚本中访问内部版本号和 VCS 结账号 在蚂蚁我可以使用 build number and build vcs number 1 分别 谢谢 这些只是 TeamCity 为 Ant Gradl
  • Java simpledateformat 英国时间

    我使用简单的日期格式来允许用户指定他们发送数据的时区 DateFormat df new SimpleDateFormat yyyy MM dd HH mm ss z 这工作正常 例如 df parse 2009 05 16 11 07 4
  • Inspired Lua程序在电脑和计算器上的不同

    I am attempting to create a simple quadratic formula program for my TI Nspire CX CAS I seem to have everything correct a
  • 如何向 JQuery 弹出窗口添加换行符

    如何在弹出窗口内容中添加换行符 换行符标记和换行符都不起作用 这就是我正在尝试的 foo hover function this popover title Bar content Line 1 br Line 2 n Line 3 pop
  • Flash逆向工程[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 为什么我们不能一次从 System.in 读取一个字符?

    下面的程序打印标准输入上写入的每个字符 但仅在写入换行符后才打印 至少在我的系统上 public class Test public static void main String args throws java io IOExcepti
  • Spring Security如何在不登录的情况下更新用户详细信息

    我是 Spring Security 的新手 我已经实现了 UserDetails 来创建我自己的用户 我还有我的自定义 userDetailsS ervice 现在一切正常 但我需要在不登录的情况下更新有关我的用户的信息 如何做到这一点
  • WooCommerce REST API - 按修改日期过滤订单

    我正在使用 WooCommerce REST API http woocommerce github io woocommerce rest api docs introduction http woocommerce github io
  • 带有伪造霍夫曼表的 jpeg 可以恢复吗?

    我有一个在任何程序中都无法打开的 JPEG 在 Ubuntu 图像查看器中打开会产生 把照片传过去convert产生类似的结果 convert corrupt jpg out jpg convert im6 Bogus Huffman ta
  • 如何在 .NET 应用程序中使用 C++ 项目?

    我是一名普通的 NET 开发人员 旨在将 C 库集成到 NET 项目中 我有一些想法 但由于我总体上是 C 新手 所以我不知道我正在尝试使用的技术的局限性 C 项目本质上是一个快速声音渲染器 可以使用一堆不同的后处理技巧来播放多轨音频文件