C++源代码封装成dll动态链接库,并在WPF项目中使用的步骤说明

文章目录

  • 1. 创建并生成C++的DLL(C++动态链接库)
    • (1)新建项目-->开发语言选定C++,在搜索栏搜索“动态链接库”-->配置项目名称和路径-->添加类,此处命名为My_C_Class
    • (2)实现类的功能,此处只简单实现`a+b`的功能
    • (3)编译,生成.dll和.lib等文件
  • 2. C#类库进一步封装C++,生成C#的DLL(NuGet包)
    • (1)新建C#类库项目,命名为My_CS_DLL,类名命名为My_CS_Class
    • (2)安装fody插件
    • (3) 添加dll到项目,并修改dll的属性
    • (4)添加My_C++\_DLL库的引用,编译
    • (5)发布My_CS_DLL的NuGet包(发布之前建议配置好版本,便于后续分辨)
  • 3. 在WPF应用程序工程中导入C#的NuGet包
    • (1)创建wpf项目
    • (2)导入本地NuGet包
    • (3)测试
  • 4. 更新NuGet包(版本更新)
    • (1)打开发布NuGet包的项目,在项目文件中修改属性Version的值
    • (2)发布,得到新版本的NuGet包
    • (3)拷贝到Package Source路径下
    • (4)更新

将C++源码生成DLL,并在WPF中使用该DLL的步骤:

  1. 创建 C++ 类库项目,添加对应的.cpp和.h文件,生成C++.dll
  2. 创建C#类库项目,添加C++.dll,使用fody将该C#类库项目发布成NuGet包(NuGet包保存在一个指定文件夹中,该文件夹专用于保存本地NuGet包)
  3. 创建WPF应用程序,通过“管理NuGet”包将上述保存的包添加到新建WPF项目中

1. 创建并生成C++的DLL(C++动态链接库)

(1)新建项目–>开发语言选定C++,在搜索栏搜索“动态链接库”–>配置项目名称和路径–>添加类,此处命名为My_C_Class

在这里插入图片描述

(2)实现类的功能,此处只简单实现a+b的功能

.cpp和.h文件内容如下:
在这里插入图片描述

添加预处理符号_EXPORTING的定义:
在这里插入图片描述

(3)编译,生成.dll和.lib等文件

“生成”–>“Build My_C++_DLL”,成功后可以在项目路径中的Debug/文件夹中查看到.dll文件
在这里插入图片描述

2. C#类库进一步封装C++,生成C#的DLL(NuGet包)

(1)新建C#类库项目,命名为My_CS_DLL,类名命名为My_CS_Class

在这里插入图片描述

(2)安装fody插件

右键项目名称–>管理NuGet程序包–>搜索栏搜索“fody”,选择“Costura.Fody”进行安装
在这里插入图片描述

(3) 添加dll到项目,并修改dll的属性

在项目内手动新建文件夹,命名为“Costura64”(代表64位),将第一步生成的My_C++_DLL.dll文件拷贝到该路径下,修改dll的属性,点“生成解决方案”,会生成FodyWeavers.xml文件

在这里插入图片描述

(4)添加My_C++_DLL库的引用,编译

在My_CS_Class.cs中添加My_C++_DLL库的引用,以及在FodyWeavers.xml中添加My_C++_DLL库,编译
在这里插入图片描述

(5)发布My_CS_DLL的NuGet包(发布之前建议配置好版本,便于后续分辨)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完成上述步骤后,C#封装完成。

3. 在WPF应用程序工程中导入C#的NuGet包

(1)创建wpf项目

在这里插入图片描述

(2)导入本地NuGet包

在这里插入图片描述
在这里插入图片描述

(3)测试

在这里插入图片描述

至此,C++源码封装成类库并在wpf项目中引用的过程已全部实现。

4. 更新NuGet包(版本更新)

(1)打开发布NuGet包的项目,在项目文件中修改属性Version的值

在这里插入图片描述

(2)发布,得到新版本的NuGet包

在这里插入图片描述

(3)拷贝到Package Source路径下

在这里插入图片描述

(4)更新

在这里插入图片描述
附件:

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

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

相关文章

Logstash 安装与部署(无坑版)

下载 版本对照关系:ElasticSearch 7.9.2 和 Logstash 7.9.2 ; 官方下载地址 选择ElasticSearch版本一致的Logstash版本 https://www.elastic.co/cn/downloads/logstash 下载链接:https://artifacts.elastic.co/downloads/logstash/logst…

Flask-WTF的使用

组织一个 Flask 项目通常需要遵循一定的结构,以便代码清晰、可维护。下面是一个典型的 Flask 项目结构: my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── models.py │ ├── views.py │ ├── forms.py │ ├── templat…

什么样的无线麦克风好?罗德、西圣、优篮子无线麦克风实测对比

在这个人人都在用短视频分享记录生活的时代,拍摄生活Vlog和短视频已经深入我们生活的方方面面,美食分享、搞笑视频以及直播等等,不过既然说到视频创作,那么光有好的内容画面肯定是远远不够的,试想一段视频里杂音不断&a…

单片机带隙电压基准电路

单片机带隙电压基准电路 一、带隙电压基准电路概述 带隙电压基准电路在单片机中占据着至关重要的地位。它能够为各种模拟集成电路提供稳定的参考电压,确保电路的正常运行。例如,在高精度的比较器中,带隙电压基准电路可以提供一个精确的参考…

【可测试性实践】C++单元测试:gtest gmock

引言 google test是目前C主流的单元测试框架,本文介绍如何在工程引入gtest和gmock,并提供入门参考示例。根据黄金圈思维我们先思考Why(为什么做),为什么我们要进行单元测试,为什么要引入mock手段来测试代码…

IBM中国研发部裁员:全球化背景下的中国IT产业挑战与机遇

文章目录 每日一句正能量前言整体分析人才发展裁员对中国IT人才市场的影响:IT从业者提升竞争力的策略: 产业未来后记 每日一句正能量 一切美好的事物都是曲折地接近自己的目标,一切笔直都是骗人的,所有真理都是弯曲的,…

设计一个高质量的API接口:提升应用性能的关键步骤

在当今的软件开发世界中,API(应用程序编程接口)接口扮演着至关重要的角色。一个设计精良的API不仅能够提高开发效率,还能提升用户体验,并确保系统的可扩展性和安全性。本文将探讨如何设计一个高质量的API接口&#xff…

蓝卓标杆客户镇洋发展,荣获IDC中国未来企业大奖

9月11-12日,2024 IDC中国年度盛典暨颁奖典礼在上海正式举办,年度盛典公布了2024 IDC中国未来企业大奖等系列奖项,以此表彰不同机构/组织/个人在数字化转型大背景下的努力与成绩。 其中,浙江镇洋发展股份有限公司(以下简…

【sgCreateCallAPIFunction】自定义小工具:敏捷开发→调用接口方法代码生成工具

<template><div :class"$options.name" class"sgDevTool"><sgHead /><div class"sg-container"><div class"sg-start"><div style"margin-bottom: 10px">调用接口方法定义列表</div…

Gradio导入AIGC大模型创建web端智能体聊天机器人,python(2)

Gradio导入AIGC大模型创建web端智能体聊天机器人&#xff0c;python&#xff08;2&#xff09; 选用这个大模型&#xff1a; https://huggingface.co/HuggingFaceTB/SmolLM-1.7B-Instructhttps://huggingface.co/HuggingFaceTB/SmolLM-1.7B-Instruct原因是该模型相对比较小&am…

使用Dev-C++实现比大小的C语言程序

使用Dev-C++实现比大小的C语言程序 引言一、Dev-C++开发环境简介与安装1.1 Dev-C++简介1.2 Dev-C++安装步骤二、初识C语言与Dev-C++的使用2.1 C语言基础2.2 创建一个新的C项目2.3 编写简单的C程序2.4 编译与运行三、编写比大小的C程序3.1 程序需求3.2 程序设计3.3 编写代码3.4 …

dubbo三

dubbo dubbo架构各层说明 URL举例解析 消费者引用服务过程 项目初始化

.ideavimrc在idea打不开

### bug修复 自己不知道搞了啥导致.ideavimrc文件打不开&#xff0c;如图点击无反应 ![[Pasted image 20240917004710.png|400]] 后面发现是格式类型的错误 参考[这篇文章](https://blog.csdn.net/qq_41147260/article/details/85002668) **修复** - AltCtrls 打开设置 - Edi…

win11:重命名文件自动改变位置

你用的系统有个小bug 就是在桌面上重命名文件之后 文件会自动跳转到左上角 有些不注意的以为文件丢了 分类摆放好的文件 重命名之后还得拉回原来的位置 其实简单设置一下 就可以修复这个小bug 1、我们找到设置 在搜索栏搜索“个性化”&#xff0c;选择---‘开始’菜单设置 2、…

【北京迅为】《STM32MP157开发板使用手册》- 第三十一章Cortex-M4窗口看门狗实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器&#xff0c;既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构&#xff0c;主频650M、1G内存、8G存储&#xff0c;核心板采用工业级板对板连接器&#xff0c;高可靠&#xff0c;牢固耐…

java进销存系统源码:管店云进销存解决方案

在当今数字化转型的大背景下&#xff0c;企业对高效、可靠的进销存管理系统的需求日益增长。Java作为一种广泛使用的编程语言&#xff0c;以其成熟的技术栈和强大的生态系统&#xff0c;成为了开发高性能进销存系统的首选语言之一。本文将介绍一款基于Java进销存系统源码的“管…

yolov5s网络结构

鉴于网上关于yolov5s的解读众多然不尽相同&#xff0c;特从YOLOv5官方项目地址&#xff1a;https://github.com/ultralytics/yolov5下载了yolov5的各版本文件并上传至 [资源] 栏目&#xff0c;这里就yolov5s版本的网络结构进行分析展示。 1、yolov5s模型的yaml文件 # Ultralyt…

Git使用教程-将idea本地文件配置到gitte上的保姆级别步骤

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

基于LangChain的Embedding开发手册(保姆级)

前言 时至今日&#xff0c;经过2年的“攻城拔寨”&#xff0c;大模型显然吹进了“寻常百姓家”。如果你还不了解ChatGPT&#xff0c;不了解通义、文心、混元等国内任意一款大模型产品&#xff0c;那么请来博主这里坐坐&#xff0c;我们“边看边聊”。 随着ChatGPT的问世&#…

Stable Diffusion绘画 | ControlNet应用-IP-Adapter:堪比 Midjourney 垫图

IP-Adapter 是腾讯AI实验室研发的控制器&#xff0c;属于 ControlNet 最强控制器前三之一。 如果想参照图片的风格&#xff0c;生成各种各样类似效果的图片&#xff0c;就可以用到 IP-Adapter。 在 ControlNet 单元中上传一张图片&#xff1a; 不输入任何提示词&#xff0c;出图…