把c++的函数导出为dll文件

news2024/12/25 9:31:28

目录

什么是dll文件

把c++函数变为dll有什么好处

开始教程

打开Visual Studio 2022创建

 调整编译器设置

创建头文件

DLL1.h

创建源文件编辑函数内容

DLL1.cpp

编译成dll文件


什么是dll文件

DLL(Dynamic Link Library,动态链接库)是一种包含可被多个程序共享的代码和数据的文件格式。它可以被动态链接到程序中,在程序运行时提供所需的功能和服务。DLL 文件通常包含函数、类、变量和资源等,可以被其他程序调用和使用。使用 DLL 可以实现代码的复用、模块化开发和提高程序性能等好处。

把c++函数变为dll有什么好处

  1. 代码复用:通过将函数导出为 DLL,可以将函数封装在独立的库中,供其他程序重复使用,避免重复实现相同的功能,提高代码的复用性。

  2. 模块化开发:将函数导出为 DLL 可以帮助实现模块化开发,即将程序划分为多个模块,每个模块对应一个或多个 DLL,方便团队协作,每个人负责不同的模块。

  3. 提高性能:将常用的函数导出为 DLL,可以提高程序的运行效率。由于 DLL 是被动态链接的,它们可以被多个程序共享,减少内存使用。

  4. 保护知识产权:通过将核心代码封装在 DLL 中,可以保护知识产权,只将 DLL 提供给需要的人使用,不需要对源代码进行公开。

并且在python中你可以调用你自己编写的dll文件从而既可以最大的加快代码的运行速度(因为是用C++写的快了不止一点),又能达到你想要的效果。

开始教程

打开Visual Studio 2022创建

打开Visual Studio 2022选择创建新项目

搜索dll或者动态链接库

我选择的是第一个

进入后出现了

除了划红线的

其他的打开会自己创建

 调整编译器设置

进入调试中的调试属性

 确保红框一致

(如果是64位就最好是64位)

创建头文件

头文件结构为

DLL1.h

#pragma once

#ifndef _DLL1_H
#define _DLL1_H

#define DLL1_API extern "C"  _declspec(dllexport)

DLL1_API double Add_sum(int n);

#endif // DEBUG




其中开头的

#pragma once

#ifndef _DLL1_H
#define _DLL1_H

是宏定义为头文件必须的

#define DLL1_API extern "C"  _declspec(dllexport)

这是告诉编译器是以c/c++语言编辑的

接下来就是定义函数的格式,在头文件中只是声明不进行编辑

DLL1_API double Add_sum(int n);

最后再加一句

#endif // DEBUG

创建源文件编辑函数内容

函数为计算2的n次方......这里不用在意函数内容

DLL1.cpp

#include "DLL1.h"
#include "iostream"
using namespace std;
// 传入参数位数字,无返回,输出num的平方
DLL1_API double Add_sum(int n)
{
	if (n == 0)
		return 1.0;
	int max = 1;
	int i = 2;
	double j = 1 / 2;
	while (n != 0)
	{
		int sum_1 = n % 2;
		if (n > 0)
		{
			if (n == 1)
				max *= i;
			i = i * i;
			n = n / 2;
		}
		else
		{
			if (n == 1)
				max *= i;
			j = j * j;
			n = n / 2;
		}
	}
	return max;
}

编译成dll文件

点击重新生成

这样如果没报错得到话就会生成一个dll文件

 在当前目录下

 做这一期的原因是python代码有时运行的速度很慢,但是python的包使用很便捷不想抛弃,所以用c语言优化一部分代码来实现加快程序运行速度

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

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

相关文章

1、Nginx 简介

文章目录 1、Nginx 简介1.1 Nginx 概述1.2 Nginx 作为 web 服务器1.3 正向代理1.4 反向代理1.5 负载均衡1.6 动静分离 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达;言不信者行不果。 1、Nginx 简介 1.1 Nginx 概述 Nginx (“engine x”) 是一个高性能的 HT…

嵌入式如何入门?

学好嵌入式的前提是精通C语言。虽然在大学期间可能不需要参加电赛或者与老师合作项目,但C语言的学习却必不可少。如果把切菜比作厨师的基本功,那么C语言就是嵌入式程序员的基本功。因此,很多招聘公司会通过考察面试者的C语言来评判其水平。 另…

vue 根据数值判断颜色

1.首先style样式给两种颜色 用:class 三元运算符判断出一种颜色 第一步&#xff1a;在style里边设置两种颜色 .green{color: green; } .orange{color: orangered; }在取数据的标签 里边 判断一种颜色 :class"item.quote.current >0 ?orange: green"<van-gri…

服务器监控可视化

IT监控可视化是一种将IT监控数据以图形化的方式呈现给用户的技术&#xff0c;可以帮助用户更直观、更易懂地了解IT系统的运行状况。服务器监控可视化是其中的一个重要应用场景&#xff0c;可以将服务器的各种性能指标以图表、仪表盘等形式展示&#xff0c;以便管理员更好地了解…

多级缓存 架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;多次遇到一个很重要的面试题&#xff1a; 20w的QPS的场景下&#xff0c;服务端架构应如何设计&#xff1f;10w的QPS…

4G版本云音响设置教程阿里云平台版本

4G版本云音响设置教程介绍 第一章 介绍了在阿里云物联网平台生一个设备使用的三元素 第二章 转换阿里云三元素 为MQTT参数&#xff0c;并下载到设备中 第三章 阿里云物联网套件协议使用说明&#xff0c;如何发送数据至设备并播放 目录 4G版本云音响设置教程介绍 一、申请设…

常用查看linux服务器配置命令

常用查看服务器配置命令 查看内存 free -h查看cpu lscpu cat /proc/cpuinfo查看操作系统版本 uname -a cat /etc/redhat-release #centos系统查看查看磁盘空间 df -h lsblk fdisk -l查看指定目录大小 du -sh 查看环境变量资源 env其他命令查看 hostname # 查看计算…

一款不能错过的Git客户端:Fork for Mac,让你的代码管理更便捷

Fork for Mac是一款强大的Git客户端&#xff0c;让用户在Mac电脑上更方便地进行版本控制和代码管理。它具有以下特点&#xff1a; 易用性&#xff1a;Fork for Mac界面简洁明了&#xff0c;操作简单易懂&#xff0c;让用户可以快速上手。功能强大&#xff1a;支持各种Git功能&…

【系统编程】线程安全(POSIX信号量、互斥锁、读写锁等)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

数据库(MySQL)的存储过程

一、存储过程介绍 存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合&#xff0c;调用存储过程可以简化应用开发人员的很多工作&#xff0c;减少数据在数据库和应用服务器之间的传输&#xff0c;对于提高数据处理的效率是有好处的。 存储过程思想上很简单&#xff0…

988. 从叶结点开始的最小字符串

988. 从叶结点开始的最小字符串 C代码&#xff1a;DFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/// 叶子节点// 每一层用一个pathTop、遇到叶子节点就判断一次&#xff1b;…

Homebrew下载安装及使用教程

Homebrew是什么&#xff1f; 简单来说&#xff0c;就是用命令行的形式去管理mac系统的包或软件。 安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"国内请使用镜像源进行下载 执行上述命令后会要求输入…

大语言模型之七- Llama-2单GPU微调SFT

&#xff08;T4 16G&#xff09;模型预训练colab脚本在github主页面。详见Finetuning_LLama_2_0_on_Colab_with_1_GPU.ipynb 在上一篇博客提到两种改进预训练模型性能的方法Retrieval-Augmented Generation (RAG) 或者 finetuning。本篇博客过一下模型微调。 微调&#xff1a…

长清湖图书阅览室《乡村振兴战略下传统村落文化旅游设计》许少辉著

长清湖图书阅览室《乡村振兴战略下传统村落文化旅游设计》许少辉著

Pygame中Trivia游戏解析6-3

3.3 Trivia类的show_question()函数 Trivia类的show_question()函数的作用是显示题目。主要包括显示题目框架、显示题目内容和显示题目选项等三部分。 3.3.1 显示题目的框架 在show_question()函数中&#xff0c;通过以下代码显示题目的框架。 print_text(font1, 210, 5, &q…

前端Vue自定义得分构成水平柱形图组件 可用于系统专业门类得分评估分析

引入Vue自定义得分构成水平柱形图组件&#xff1a;cc-horBarChart 随着技术的发展&#xff0c;传统的开发方式使得系统的复杂度越来越高&#xff0c;一个小小的改动或小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c…

Liunx系统编程:信号量

一. 信号量概述 1.1 信号量的概念 在多线程场景下&#xff0c;我们经常会提到临界区和临界资源的概念&#xff0c;如果临界区资源同时有多个执行流进入&#xff0c;那么在多线程下就容易引发线程安全问题。 为了保证线程安全&#xff0c;互斥被引入&#xff0c;互斥可以保证…

Nat. Commun.2023 | AI-Bind+:提高蛋白质配体结合预测的通用性

论文标题&#xff1a;Improving the generalizability of protein-ligand binding predictions with AI-Bind 论文地址&#xff1a;Improving the generalizability of protein-ligand binding predictions with AI-Bind | Nature Communications 代码&#xff1a; Barabasi…

Linux 基础篇

很长时间&#xff0c;因为一些事情&#xff0c;没有更新我的文章这让我很惭愧&#xff0c;于是我将打算在今天更新下自己的文章&#xff0c;我发现一些事情&#xff0c;计算机并不是很难学到可以工作的水平&#xff0c;关键在于是否可以坚持下来&#xff0c;有很多时候我并不是…

TypeScript学习 + 贪吃蛇项目

TypeSCript简介 TypeScript是JavaScript的超集。它对JS进行了扩展&#xff0c;向JS中引入了类型的概念&#xff0c;并添加了许多新的特性。TS代码需要通过编译器编译为JS&#xff0c;然后再交由JS解析器执行。TS完全兼容JS&#xff0c;换言之&#xff0c;任何的JS代码都可以直…