C#调用C++ DLL方法之C++/CLI(托管C++)
托管C++与C++/CLI前世今生
C++/CLI (C++/Common Language Infrastructure) 是一种用于编写托管代码的语言扩展,它是为了与 .NET Framework 进行互操作而设计的。C++/CLI 是 C++ 的一种方言,它引入了一些新的语法和关键字,以便更好地支持 .NET 类型和垃圾回收。
托管C++ (Managed Extensions for C++) 是早期的一种用于编写托管代码的语言扩展,它也是为了与 .NET Framework 进行互操作而设计的。托管C++ 是 C++ 的一种扩展,但它的语法和使用方式相对复杂和不直观。
以下是 C++/CLI 和托管C++ 的一些主要区别:
-
语法和关键字:
C++/CLI 引入了新的语法和关键字,如ref class、^(句柄) 和gcnew,
使得编写托管代码更加直观和简洁。
托管C++ 使用__gc、__value等前缀来标识托管类型,语法相对复杂。 -
类型系统:
C++/CLI 更好地集成了 .NET 类型系统,支持泛型、委托和事件等特性。
托管C++ 对 .NET 类型系统的支持较为有限,使用起来不如 C++/CLI 方便。 -
性能和优化:
C++/CLI 在性能和优化方面进行了改进,生成的代码更高效。
托管C++ 的性能相对较差,生成的代码效率不如 C++/CLI。 -
兼容性和支持:
C++/CLI 是当前主流的用于编写托管代码的 C++ 扩展,得到了更好的支持和维护。
托管C++ 已经被弃用,不再推荐使用。
参考文献
Managed Extensions for C++
C++/CLI
代码示例
C++部分
//.h
#ifndef HEADER_H
#define HEADER_H#include <stdio.h>
#include <stdlib.h>
#include <iostream>using namespace std;#ifdef MYCLASS_EXPORTS
#define MYCLASS_EXPORTS __declspec(dllexport)
#else
#define MYCLASS_EXPORTS __declspec(dllimport)
#endifextern "C" MYCLASS_EXPORTS int Add(int numberA, int numberB);class MyClass
{public:MyClass();~MyClass();};#endif // !HEADER_H//c.pp
#include "header.h"MyClass::MyClass()
{
}MyClass::~MyClass()
{
}MYCLASS_EXPORTS int Add(int numberA, int numberB)
{// 计算两个数的和int result = numberA + numberB;// 返回结果return result;
}
1.设置预处理器

2.输出dll

CLR部分
//.h
#ifndef HEADER_H
#define HEADER_H#include <iostream>
#include "../MyDll/header.h"//引用库声明对应文件路径public ref class MyClrClass
{
public:MyClrClass();int AddCode(int numberA, int numberB);
};#endif // !HEADER_H//.cpp
#include "header.h"MyClrClass::MyClrClass()
{
}int MyClrClass::AddCode(int numberA, int numberB)
{return Add(numberA, numberB);
}
1.修改公共语言运行时支持

2.设置语言符合模式

3.引用前面c++部分


4.输出目标dll

C#调用部分
var a = 10;
var b = 20;
var invoke = new MyClrClass();
var addResult = invoke.AddCode(a, b);
Console.WriteLine($"Add result is {addResult}");
添加CLR dll

输出结果

相关文章:
C#调用C++ DLL方法之C++/CLI(托管C++)
托管C与C/CLI前世今生 C/CLI (C/Common Language Infrastructure) 是一种用于编写托管代码的语言扩展,它是为了与 .NET Framework 进行互操作而设计的。C/CLI 是 C 的一种方言,它引入了一些新的语法和关键字,以便更好地支持 .NET 类型和垃圾…...
免费搭建一个属于自己的个性化博客(Hexo+Fluid+Github)
文章目录 0.简介1. 下载安装fluid主题2. 创建文章3. 添加分类及标签3.1 创建“分类”选项3.2 创建“标签”选项4. 文章中插入图片5. 添加阅读量统计6. 添加评论功能7. 显示文章更新时间8. 为hexo添加latex支持小结参考文献0.简介 通过HEXO模板和Fluid主题搭建自己的博客,预览…...
vue3 开发利器——unplugin-auto-import
这玩意儿是干啥的? 还记得 Vue 3 的组合式 API 语法吗?如果有印象,那你肯定对以下代码有着刻入 DNA 般的熟悉: 刚开始写觉得没什么,但是后来渐渐发现,这玩意儿几乎每个页面都有啊! 每次都要写…...
开发需求总结19-vue 根据后端返回一年的数据,过滤出符合条件数据
需求描述: 定义时间分界点:每月26号8点,过了26号8点则过滤出data数组中符合条件数据下个月的数据,否则过滤出当月数据 1.假如现在是2024年11月14日,那么过滤出data数组中日期都是2024-11月的数据; 2.假如…...
人工智能如何改变创新和创造力?
王琼工作室 输出的力量 有了GPT这样的人工智能平台,创新和创造力的机会在哪里? 我们是否有信心: 面对效率,超越效率。 把问题拓展为机会? 把机会拓展为价值? 让智能更好地和我们协作,走心、走…...
Github 基本使用学习笔记
1. 基本概念 1.1 一些名词 Repository(仓库) 用来存放代码,每个项目都有一个独立的仓库。 Star(收藏) 收藏你喜欢的项目,方便以后查看。 Fork(克隆复制项目) 复制别人的仓库&…...
群论入门笔记
群的基本定义 群由一组元素 G 和一个运算(常用符号包括 ,x , 或 ∗)组成。 封闭性 对于任意两个元素 x,y∈G,运算 x * y 的结果仍然属于集合 G,即: ∀x,y∈G,x∗y∈G. 结合律 对于任意 a,b,c∈G&…...
2024最新python使用yt-dlp
2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1)google浏览器下载Get cookies.txt LOCALLY插件2)导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1)使用Pycharm(2024.3)进行代码…...
Python + 深度学习从 0 到 1(00 / 99)
希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持! ⭐ 什么是深度学习? 人工智能、机器学习与…...
单点登录深入详解之设计方案总结
基于cookie的单点登录解决方案 概述 用户登录之后 , 将认证信息存储至 Cookie ,当再次访问本服务或者访问其他应用服务时,直接从 Cookie 中传递认证信息,进行鉴权处理。 问题 1. 如何保障Cookie内用户认证信息的安全性? 第一, Cookie…...
Loadsh源码分析-forEach,eachRight,map,flatMap,flatMapDeep,flatMapDepth
处理数组array的函数已经学习完,接下来是collection相关的函数, collection指的是一组用于处理集合(如数组或对象)的工具函数。 lodash源码研读之forEach,forEachRight,map,flatMap,flatMapDeep,flatMapDepth 一、源码地址 GitH…...
检测到“runtimelibrary”的不匹配项: 值“mtd_staticdebug”不匹配值“mdd_dynamic”
1. 解释“runtimelibrary”不匹配错误的含义 在Visual Studio中,LNK2038错误表示链接器检测到项目与其依赖的库之间存在“Runtime Library”(运行时库)的不匹配。具体来说,这意味着编译项目时使用的运行时库类型与编译依赖库时使…...
go clean -modcache命令清理缓存
go clean -modcache命令用于清理Go模块的本地缓存。Go模块缓存位于$GOPATH/pkg/mod/cache目录下,存储了所有下载和使用的模块版本。当执行go clean -modcache时,这个命令会删除该目录下的所有内容,迫使Go在下次构建时重新下载所有依赖的模块。…...
C#结构体排序(数组)
结构体排序(数组) 1 示例1.1 以PointF为例展示效果1.2 运行结果展示 2实际运用2.1 创建结构体2.2 调用示例2.3 运行结果展示 1 示例 1.1 以PointF为例展示效果 private void button1_Click(object sender, EventArgs e) {Random random new Random();…...
基于边缘智能网关的机房安全监测应用
随着我国工业互联网的扎实推进,越来越多地区积极建设信息基础设施,以充沛算力支撑产业物联网的可持续发展,数据机房就是其中的典型代表。而且随着机房规模的扩大,对于机房的安全管理难题挑战也日益增加。 面向数据机房安全监测与管…...
【Jenkins】自动化部署 maven 项目笔记
文章目录 前言1. Jenkins 新增 Maven 项目2. Jenkins 配置 Github 信息3. Jenkins 清理 Workspace4. Jenkins 配置 后置Shell脚本后记 前言 目标:自动化部署自己的github项目 过程:jenkins 配置、 shell 脚本积累 相关连接 Jenkins 官方 docker 指导d…...
LeetCode 3243. Shortest Distance After Road Addition Queries I
🔗 https://leetcode.com/problems/shortest-distance-after-road-addition-queries-i 题目 有 n 个城市,编号 0 ~ n-1,从城市 i 到 i1 有一条路给若干高速路,表明从城市 u 到 v 有一条新增的路,v - u > 1返回每新…...
ML 系列:第 31 节— 机器学习中的协方差和相关性
文章目录 一、说明二、协方差和相关性2.1 协方差的概念2.1 相关 三、有关关联的高级主题 (有关详细信息)3.1 相关性和独立性3.2 零相关性和依赖性示例 四、相关性和因果关系五、结论 一、说明 协方差量化了两个随机变量协同变化的程度。当一个变量的较高…...
【鸿蒙】鸿蒙开发过程中this指向问题
文章目录 什么是 this?常见 this 指向问题案例分析:HarmonyOS 组件中的 this 指向问题问题描述问题分析原因 解决方案:绑定 this 的正确方法方法一:使用箭头函数方法二:手动绑定 this 完整代码示例使用箭头函数使用 bi…...
d3-contour 生成等高线图
D3.js 是一个强大的 JavaScript 库,用于创建动态、交互式数据可视化。d3-contour 是 D3.js 的一个扩展模块,用于生成等高线图(contour plots)。 属性和方法 属性 x: 一个函数,用于从数据点中提取 x 坐标。y: 一个函…...
从零手写CNN:理解卷积网络的生物学原理与工程逻辑
1. 项目概述:从人眼到机器之眼,一次真实的视觉理解之旅你有没有盯着一张照片发过呆?比如朋友刚发来的旅行照——蓝天、雪山、一只歪头的雪豹。你几乎是一瞬间就认出了“雪豹”,甚至能判断它“在看镜头”“毛很厚”“可能刚睡醒”。…...
从V100到A100:手把手教你理解Ampere架构的7个关键性能优化点
从V100到A100:手把手教你理解Ampere架构的7个关键性能优化点 如果你正在使用NVIDIA V100进行深度学习训练或高性能计算,那么升级到A100可能已经在你的考虑范围内。但这次升级究竟能带来多少实际性能提升?本文将带你深入Ampere架构的7个核心优…...
毕业季救星:Word 2016域代码终极指南,让你的参考文献列表和文内引用完美同步
学术写作效率革命:用Word域代码构建智能参考文献系统 每到毕业季,总有一群人在深夜里对着电脑屏幕抓狂——他们的论文参考文献编号像多米诺骨牌一样,因为中间插入了一个新引用而全部错乱。手动调整几十处引用编号不仅耗时,还容易出…...
IP集成时代CDC验证新思路:用户灰盒方法解析与实践
1. 项目概述与核心问题在FPGA和ASIC设计领域,时钟域交叉(CDC)问题就像一颗深埋的“定时炸弹”。随着设计复杂度的飙升,尤其是IP(知识产权核)复用成为主流,这颗炸弹的引线变得越来越隐蔽…...
虞城装修公司选哪家专业?业主正确对比装修公司的方法,看完不踩坑
在虞城准备装修的业主,大多都会纠结一个问题:虞城装修公司这么多,到底哪家更专业? 很多人都是第一次装修,不懂行、不会分辨,只会看价格、看广告,很容易被低价套路、中途增项、工艺偷工减料坑到崩…...
基于Refine框架的企业级后台管理系统实战开发指南
1. 项目概述与核心价值最近在梳理企业内部后台管理系统的技术栈时,我又一次把目光投向了refine这个框架。如果你也和我一样,长期被各种业务后台的重复性开发工作所困扰——比如没完没了的增删改查(CRUD)界面、复杂的权限控制、数据…...
内存数据库eXtremeDB核心技术解析与实践指南
1. 内存数据库技术概述在传统数据库系统中,磁盘I/O往往是性能瓶颈所在。每次数据查询都需要从磁盘读取数据到内存缓冲区,这个过程中涉及机械寻道、旋转延迟等物理限制。而内存数据库(IMDS)通过直接在内存中存储和处理数据,彻底绕过了这个瓶颈…...
EdgeRemover:Windows系统终极Edge浏览器管理完全指南
EdgeRemover:Windows系统终极Edge浏览器管理完全指南 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 你是否…...
3PEAK思瑞浦 TPA1882Q-SO1R-S SOP8 运算放大器
特性 供电电压:4.5伏至36伏或2.25伏至18伏 偏移电压:最大50V 差分输入电压范围至电源轨,可作为比较器工作 输入轨至-Vs,轨到轨输出 带宽:12MHz,斜率:10V/us 优异的EMI抑制性能:1GHz时85dB 过温保护 低噪声:1kHz时为10nV/vHz 符合AEC-Q100认证…...
5大优化技巧:让ComfyUI-Manager在低配置设备上流畅运行
5大优化技巧:让ComfyUI-Manager在低配置设备上流畅运行 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various cust…...
