C#和Python使用C++编译的dll

news2024/9/20 20:32:15

C++代码如下:

extern "C" __declspec(dllexport) int __stdcall add(int a, int b) {
	return a + b;
}

 因为是显示链接,所以只需要获得生成的dll即可

因为C#无法直接调用C++的dll,所以我们使用了extern"C"

使用vs自带的工具x86_x64 Cross Tools Command Prompt for VS 2022查看dll导出符号名称

 确保导出符号名是正确的(和函数名称一致)再进行下一步操作

C#调用

C#代码如下:

using System;
using System.Runtime.InteropServices;

namespace Cshap12
{
    internal class Program
    {
        [DllImport("D:/自用/vs的c++/Cshap12/add.dll", CallingConvention = CallingConvention.StdCall)]
        static extern int add(int a,int b);
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine(Convert.ToString(add(10, 10)));
            }
            catch (Exception e)
            {

                Console.WriteLine(e.Message);
            }
        }
    }
}

CallingConvention.StdCall用来指定实现的调用约定,比如我们刚才C++编写的代码就是__stdcall

如果没有自己写明调用约定,就会使用默认调用约定__decl,C#也一样修改即可

如果有异常提示:提示"试图加载格式不正确的程序" 

记得检查dll和c#的位数

如果你生成的dll是64位的,那么当前c#环境必须也是64位

 其实也是非常的简单~~

 Python调用


from ctypes import*;

dll = windll.LoadLibrary("D:/自用/vs的c++/vs_py/add.dll")

print(dll.add(3,4))

不得不说Python是在是太简单了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue中KeepAlive 原理与源码分析

概念 keep-alive是Vue的一个内置实例,用于缓存组件。当keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是摧毁它们。keep-alive 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链之中。如需要…

网课查题API接口-搜题api

网课查题API接口-搜题api 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转&#x…

小学生python游戏开发pygame--设置内容整理

游戏开发,相关设置内容单独放在一个文件中 如长宽,大小,颜色等起名shezhi.py,如下: # _*_ coding: UTF-8 _*_ # 开发团队: 信息化未来 # 开发人员: Administrator # 开发时间:2022…

微信小程序中如何实现省市区街道四级地址级联选择

大家好,我是雄雄。 前言 微信小程序中支持省市区地址级联吗?微信小程序中的地址级联最多支持到几级? 今天,我们就来看看,微信小程序中的地址级联的使用,以及一些坑…希望大家看完之后能避免踩坑啊。 省市…

JS(受人以鱼 不如受人以渔)第十七课

比你优秀的人都比你努力,你有什么理由不去努力。基础来自己的累秒累天累月的积累 没有一个人是从天而降的天才,也没有哪个人想做一个一生贫庸的人。今天我想说 受人以鱼 不如受人以渔 推荐几个官网可以自己主动去学习 JavaScript中文网-JavaScript教程…

虚拟物品(游戏)交易平台的设计与实现(Java+SSM+MySQL)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景及意义 1 1.2研究现状 1 1.3研究主要内容 2 第2章 相关技术介绍 4 1.1 SSM的技术原理 4 1.1.1 SSM语言及其特点 4 1.1.2 Java及Java Servlets概述 6 1.1.3 JavaBean简介 6 1.2 服务器配置 7 1.2.1 Tomcat安装及配置 7 1.2.2…

工业控制系统所面临的安全威胁

年新增漏洞严重程度分析 因本文收集处理的公开漏洞基本上都被 CVE 所收录, 所以本文在分析这些漏洞的严重 性时,将主要根据 CVE 的 CVSS 评估值①来判断,并划分为高、中、低三种情况。 根据图 2.9 的统计分析 ,2013 年的新增漏洞…

MySQL索引优化

索引优化 EXPLAIN查询分析 参考另一篇,通过explain我们可以确定查询语句的访问类型,用到的索引,扫描行数以及extra信息。 回表查询与覆盖索引 InnoDB索引有聚簇索引和辅助索引。聚簇索引的叶子节点存储行记录,InnoDB必须要有&…

sql查询面试题复习

基础 查所有的数据 select * from user_profile;查询某几列 select device_id,gender,age,university from user_profile;取出学校的去重数据。 select distinct university from user_profile; #distinct 关键字查看前2个用户明细设备ID数据 select device_id from user_p…

反射、枚举和lambda表达式

文章目录一、反射反射的相关类获得Class对象的三种方法反射的基本使用反射优点和缺点二、枚举背景及定义枚举的使用为什么Enum源码中找不到values()方法?枚举与反射总结三、Lambda表达式函数式接口Lambda表达式的基本使用lambda在集合中的应用总结一、反射 Java的反…

SQL(及存储过程)跑得太慢怎么办?

SQL作为目前最常用的数据处理语言,广泛应用于查询、跑批等场景。当数据量较大时,使用SQL(以及存储过程)经常会发生跑得很慢的情况,这就要去优化SQL。优化SQL有一些特定的套路,通常先要查看执行计划来定位SQ…

性能优化:MySQL使用优化(1)

参考资料: 《explain | 索引优化的这把绝世好剑,你真的会用吗?》 《一张图彻底搞懂MySQL的 explain》 《MySQL 性能优化神器 Explain 使用分析》 《MySQL索引应用篇:建立索引的正确姿势与使用索引的最佳指南!》 《…

【Node.js】npm与包【万字教学~超超超详细】

✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 目录 包 什么是包 包的来源 为什么需要包 从哪里下载 如何下载包 npm初体验 格式化时间的传统做法 实现…

Win11系统C++将ONNX转换为engineer文件,TensorRT加速推理

准确工作,安装配置好CUDA,cudnn,vs2019,TensorRT 可以参考我博客(下面博客有CUDA11.2,CUDNN11.2,vs2019,TensorRT配置方法) (70条消息) WIN11CUAD11.2vs2019tensorTR8.6Yolov3/4/5模型加速_Ve…

【JavaDS】HashMap与HashSet的底层原理

✨博客主页: 心荣~ ✨系列专栏:【Java实现数据结构】 ✨一句短话: 难在坚持,贵在坚持,成在坚持! 文章目录一. HashMap底层原理1. HashMap的属性2. HashMap的构造方法3. 给HashMap分配内存的时机4. HashMap中的put5. HashMap中的哈希函数6. HashMap的扩容机制二. HashSet的底层原…

【资损】业务产品分析资损防控规范

📫作者简介:小明java问道之路,专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

读书 | 设计模式之禅 - 责任链模式

文章目录1. 实现古代妇女的“三从”制度2. 实现古代妇女的“三从”制度-优化3. 责任链模式的定义1. 实现古代妇女的“三从”制度 一位女性在结婚之前要听从于父亲,结婚之后要听从于丈夫,如果丈夫死了还要听从于儿子。作为父亲、丈夫或儿子,只…

Spring-day01 spring全家桶,如何学习框架,单元测试

Spring学习-概述 1. spring全家桶:spring , springmvc ,spring boot , spring cloud spring: 出现是在2002左右,解决企业开发的难度。减轻对项目模块之间的管理, 类和类之间的管理, 帮助开发人员创建对象&a…

Linux:iptables和firewalld基础j解析

目录 1、四表五链概念: 2、数据报文流程 3、iptables 与 firewalld 区别 4、DROP 和 REJECT策略的区别: 5、iptables命令参数 6、iptables基本的命令使用 7.firewalld:基于CLI(命令行界面)和基于GUI(图…

多线程wait()和notify()方法详解

多线程wait()和notify()方法详解 文章目录多线程wait()和notify()方法详解前言一、线程间等待与唤醒机制二、等待方法wait()三、唤醒方法notify()四、关于wait和notify内部等待问题(重要)五、完整代码(仅供测试用)六、wait和sleep…