当前位置: 首页 > news >正文

C# 与 C/C++ 互操作

本文介绍 C# 与 C/C++ 互操作的方法,尤重点介绍 P/Invoke。

为什么要互操作?

主要有两个原因:

  • 用 C/C++ 编写算法核心代码,提高程序性能。
  • 有一些库 / API 需要通过 C/C++ 调用。

两种方法

主要有两种方法:C++/CLI 和 P/Invoke

C++/CLI

C++/CLI 相当于微软发明的一种新语言,在 C++ 中加入了托管要素。好处是 C# 可以直接调用,不用写 P/Invoke 胶水代码。

坏处呢?这个新的语言很复杂,既需要开发者熟悉 C++ 还要熟悉 C#,还有多出来的奇妙语法。

笔者不是很推荐使用。

P/Invoke

P/Invoke(Platform Invoke,平台调用)严格来讲可以用来调用一切外部库(如 .dll.lib)。但我们重点关注调用 C/C++。大概过程是:

  • 用正常的 C/C++ 来编写代码。但注意写 C++ 时要按 C 导出,即 extern "C"。否则符号名会被修改,不好操作。
  • 把 C/C++ 代码编译成 .dll
  • 在 C# 中写一个 “桥接” 类,用 DllImport 来导入 .dll 中的符号。(其实好像可以使用自动生成器来完成这一点)

笔者比较推荐 P/Invoke。

P/Invoke

http://www.hskmm.com/?act=detail&tid=24392

相关文章:

  • 【自然语言处理】文本规范化知识点梳理与习题总结 - 教程
  • 邮票收集问题正推证明
  • 2025多校冲刺CSP模拟赛2 2025.10.4 模拟炸
  • 算法乱谈
  • 2025 年 9 月习题集
  • C# 代码规范
  • 实用指南:babelfish for postgresql 分析--todo
  • NFC 贴卡自动拨打微信视频电话
  • 10.4
  • 实用指南:d-分离:图模型中的条件独立性判定准则
  • [MCP] 监听资源更新
  • [RAG] 基础知识
  • CF1408F Two Different
  • 数据结构 - 字典树 Trie
  • 激活函数实现
  • 漏洞赏金入门指南:从零开始的实战方法论
  • PMON failed to acquire latch 的报错及sqlplus / as sysdba 无法连接 - 详解
  • 2025CSP-S模拟赛58 比赛总结
  • 精读C++设计模式20 —— 结构型设计模式:桥接模式 - 详解
  • 用纯.NET开发并制作一个智能桌面机器人(六):使用.NET开发一个跨平台功能完善的小智AI客户端
  • 2025/10/4 总结
  • Qt处理Windows平板上摄像头
  • 你必须知道的TCP和UDP核心区别,快速搞懂这两大协议!
  • [swift 外部干涉法 extension]
  • 2025国庆Day3
  • 量子迁移计划启动:应对未来密码学挑战
  • HPE SPP 2025.09.00.00 - HPE 服务器固件、驱动程序和系统软件包
  • 详细介绍:Linux字符设备驱动开发全攻略
  • sql注入和xss漏洞
  • 数学 trick