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

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++ 的一些主要区别:

  1. 语法和关键字:
    C++/CLI 引入了新的语法和关键字,如 ref class^ (句柄) 和 gcnew
    使得编写托管代码更加直观和简洁。
    托管C++ 使用 __gc__value 等前缀来标识托管类型,语法相对复杂。

  2. 类型系统:
    C++/CLI 更好地集成了 .NET 类型系统,支持泛型、委托和事件等特性。
    托管C++ 对 .NET 类型系统的支持较为有限,使用起来不如 C++/CLI 方便。

  3. 性能和优化:
    C++/CLI 在性能和优化方面进行了改进,生成的代码更高效。
    托管C++ 的性能相对较差,生成的代码效率不如 C++/CLI。

  4. 兼容性和支持:
    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) 是一种用于编写托管代码的语言扩展&#xff0c;它是为了与 .NET Framework 进行互操作而设计的。C/CLI 是 C 的一种方言&#xff0c;它引入了一些新的语法和关键字&#xff0c;以便更好地支持 .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

这玩意儿是干啥的&#xff1f; 还记得 Vue 3 的组合式 API 语法吗&#xff1f;如果有印象&#xff0c;那你肯定对以下代码有着刻入 DNA 般的熟悉&#xff1a; 刚开始写觉得没什么&#xff0c;但是后来渐渐发现&#xff0c;这玩意儿几乎每个页面都有啊&#xff01; 每次都要写…...

开发需求总结19-vue 根据后端返回一年的数据,过滤出符合条件数据

需求描述&#xff1a; 定义时间分界点&#xff1a;每月26号8点&#xff0c;过了26号8点则过滤出data数组中符合条件数据下个月的数据&#xff0c;否则过滤出当月数据 1.假如现在是2024年11月14日&#xff0c;那么过滤出data数组中日期都是2024-11月的数据&#xff1b; 2.假如…...

人工智能如何改变创新和创造力?

王琼工作室 输出的力量 有了GPT这样的人工智能平台&#xff0c;创新和创造力的机会在哪里&#xff1f; 我们是否有信心&#xff1a; 面对效率&#xff0c;超越效率。 把问题拓展为机会&#xff1f; 把机会拓展为价值&#xff1f; 让智能更好地和我们协作&#xff0c;走心、走…...

Github 基本使用学习笔记

1. 基本概念 1.1 一些名词 Repository&#xff08;仓库&#xff09; 用来存放代码&#xff0c;每个项目都有一个独立的仓库。 Star&#xff08;收藏&#xff09; 收藏你喜欢的项目&#xff0c;方便以后查看。 Fork&#xff08;克隆复制项目&#xff09; 复制别人的仓库&…...

群论入门笔记

群的基本定义 群由一组元素 G 和一个运算&#xff08;常用符号包括 &#xff0c;x , 或 ∗&#xff09;组成。 封闭性 对于任意两个元素 x,y∈G&#xff0c;运算 x * y 的结果仍然属于集合 G&#xff0c;即&#xff1a; ∀x,y∈G,x∗y∈G. 结合律 对于任意 a,b,c∈G&…...

2024最新python使用yt-dlp

2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1&#xff09;google浏览器下载Get cookies.txt LOCALLY插件2&#xff09;导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1&#xff09;使用Pycharm(2024.3)进行代码…...

Python + 深度学习从 0 到 1(00 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ 什么是深度学习&#xff1f; 人工智能、机器学习与…...

单点登录深入详解之设计方案总结

基于cookie的单点登录解决方案 概述 用户登录之后 , 将认证信息存储至 Cookie &#xff0c;当再次访问本服务或者访问其他应用服务时&#xff0c;直接从 Cookie 中传递认证信息&#xff0c;进行鉴权处理。 问题 1. 如何保障Cookie内用户认证信息的安全性? 第一, Cookie…...

Loadsh源码分析-forEach,eachRight,map,flatMap,flatMapDeep,flatMapDepth

处理数组array的函数已经学习完&#xff0c;接下来是collection相关的函数&#xff0c; collection指的是一组用于处理集合&#xff08;如数组或对象&#xff09;的工具函数。 lodash源码研读之forEach,forEachRight,map,flatMap,flatMapDeep,flatMapDepth 一、源码地址 GitH…...

检测到“runtimelibrary”的不匹配项: 值“mtd_staticdebug”不匹配值“mdd_dynamic”

1. 解释“runtimelibrary”不匹配错误的含义 在Visual Studio中&#xff0c;LNK2038错误表示链接器检测到项目与其依赖的库之间存在“Runtime Library”&#xff08;运行时库&#xff09;的不匹配。具体来说&#xff0c;这意味着编译项目时使用的运行时库类型与编译依赖库时使…...

go clean -modcache命令清理缓存

go clean -modcache命令用于清理Go模块的本地缓存。Go模块缓存位于$GOPATH/pkg/mod/cache目录下&#xff0c;存储了所有下载和使用的模块版本。当执行go clean -modcache时&#xff0c;这个命令会删除该目录下的所有内容&#xff0c;迫使Go在下次构建时重新下载所有依赖的模块。…...

C#结构体排序(数组)

结构体排序&#xff08;数组&#xff09; 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();…...

基于边缘智能网关的机房安全监测应用

随着我国工业互联网的扎实推进&#xff0c;越来越多地区积极建设信息基础设施&#xff0c;以充沛算力支撑产业物联网的可持续发展&#xff0c;数据机房就是其中的典型代表。而且随着机房规模的扩大&#xff0c;对于机房的安全管理难题挑战也日益增加。 面向数据机房安全监测与管…...

【Jenkins】自动化部署 maven 项目笔记

文章目录 前言1. Jenkins 新增 Maven 项目2. Jenkins 配置 Github 信息3. Jenkins 清理 Workspace4. Jenkins 配置 后置Shell脚本后记 前言 目标&#xff1a;自动化部署自己的github项目 过程&#xff1a;jenkins 配置、 shell 脚本积累 相关连接 Jenkins 官方 docker 指导d…...

LeetCode 3243. Shortest Distance After Road Addition Queries I

&#x1f517; https://leetcode.com/problems/shortest-distance-after-road-addition-queries-i 题目 有 n 个城市&#xff0c;编号 0 ~ n-1&#xff0c;从城市 i 到 i1 有一条路给若干高速路&#xff0c;表明从城市 u 到 v 有一条新增的路&#xff0c;v - u > 1返回每新…...

ML 系列:第 31 节— 机器学习中的协方差和相关性

文章目录 一、说明二、协方差和相关性2.1 协方差的概念2.1 相关 三、有关关联的高级主题 &#xff08;有关详细信息&#xff09;3.1 相关性和独立性3.2 零相关性和依赖性示例 四、相关性和因果关系五、结论 一、说明 协方差量化了两个随机变量协同变化的程度。当一个变量的较高…...

【鸿蒙】鸿蒙开发过程中this指向问题

文章目录 什么是 this&#xff1f;常见 this 指向问题案例分析&#xff1a;HarmonyOS 组件中的 this 指向问题问题描述问题分析原因 解决方案&#xff1a;绑定 this 的正确方法方法一&#xff1a;使用箭头函数方法二&#xff1a;手动绑定 this 完整代码示例使用箭头函数使用 bi…...

d3-contour 生成等高线图

D3.js 是一个强大的 JavaScript 库&#xff0c;用于创建动态、交互式数据可视化。d3-contour 是 D3.js 的一个扩展模块&#xff0c;用于生成等高线图&#xff08;contour plots&#xff09;。 属性和方法 属性 x: 一个函数&#xff0c;用于从数据点中提取 x 坐标。y: 一个函…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

规则与人性的天平——由高考迟到事件引发的思考

当那位身着校服的考生在考场关闭1分钟后狂奔而至&#xff0c;他涨红的脸上写满绝望。铁门内秒针划过的弧度&#xff0c;成为改变人生的残酷抛物线。家长声嘶力竭的哀求与考务人员机械的"这是规定"&#xff0c;构成当代中国教育最尖锐的隐喻。 一、刚性规则的必要性 …...

游戏开发中常见的战斗数值英文缩写对照表

游戏开发中常见的战斗数值英文缩写对照表 基础属性&#xff08;Basic Attributes&#xff09; 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...