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

C++封装dll和lib 供C++调用

头文件interface.h

#pragma once
#ifndef INTERFACE_H
#define INTERFACE_H
#define _CRT_SECURE_NO_WARNINGS
#define FENGZHUANG_API _declspec(dllexport)
#include <string>
namespace FengZhuang {class FENGZHUANG_API IInterface {public:static IInterface* CreateInterface();virtual void Init() = 0;virtual void Destroy() = 0;virtual const char* GetName() = 0;virtual void Log(int index, const std::string& windowName, bool includeDate,const char* format, ...) = 0;};
}
#endif

source.cpp文件:

#include "interface.h"
#include <iostream>
#include <ctime>
//以下是log里面需要的头文件
#include <fstream> //打开写入std::ofstream file 需要的
#include <chrono> //std::chrono 获取时间需要的
#include <cstdarg>//va_start需要的头文件namespace FengZhuang {class FHello : public IInterface {public:FHello();void Init() override;void Destroy() override;const char* GetName() override;void Log(int index, const std::string& windowName, bool includeDate,const char* format, ...) override;private:char name[1024];};FHello::FHello(){memset(name, 0, 1024);strcpy(name, "hello");}void FHello::Init(){printf("FHello::Init\n");}void FHello::Destroy(){printf("FHello::Destroy\n");}const char* FHello::GetName() {return "FHello";}void FHello::Log(int index, const std::string& windowName, bool includeDate,const char* format, ...) {std::string filename = std::to_string(index) + windowName + ".txt";// 打开文件以追加写入日志std::ofstream file(filename, std::ios::app);if (!file.is_open()){std::cerr << "无法打开日志文件:" << filename << std::endl;return;}// 获取时间戳auto now = std::chrono::system_clock::now();std::time_t currentTime = std::chrono::system_clock::to_time_t(now);std::tm timeInfo;
#ifdef _WIN32localtime_s(&timeInfo, &currentTime);
#elselocaltime_r(&currentTime, &timeInfo);
#endifchar timeBuffer[128];if (includeDate){//std::strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d %T", &timeInfo);//%T ==%H:%M:%Sstd::strftime(timeBuffer, sizeof(timeBuffer), "%Y-%m-%d %H:%M:%S", &timeInfo);}else{//std::strftime(timeBuffer, sizeof(timeBuffer), "%T", &timeInfo);std::strftime(timeBuffer, sizeof(timeBuffer), "%H:%M:%S", &timeInfo);}// 格式化日志消息va_list args;va_start(args, format);char buffer[256];vsnprintf(buffer, sizeof(buffer), format, args);va_end(args);// 在控制台和文件中输出日志消息std::printf("%s %s", timeBuffer, buffer);file << timeBuffer << " " << buffer;}IInterface* IInterface::CreateInterface(){return new FHello();}
} // namespace FengZhuang

下面是自己项目内测试代码:

int main() {FengZhuang::IInterface* IF = FengZhuang::IInterface::CreateInterface();IF->Destroy();IF->Log(1, "窗口1", 1, " %d行 窗口:%s x:%d \n", __LINE__, "窗口1", 123);delete IF;
}

其他C++使用者调用方法;

设置库需要3步
1.VC++目录-外部包含目录,添加外部库目录,就是库的头文件 #include "interface.h"的位置
2.VC++目录-库目录,
3.连接器–附加依赖项,就是lib库的名称

#include "interface.h"
int main() {FengZhuang::IInterface* IF = FengZhuang::IInterface::CreateInterface();IF->Init();IF->Destroy();IF->Log(1,"窗口1",0," %d行 窗口:%s x:%d \n",__LINE__, "窗口1",123);delete IF;return 0;
}

成功调用!!这是C++可以调用的方式,还要写个C和易语言以及python可以调用的方式。

相关文章:

C++封装dll和lib 供C++调用

头文件interface.h #pragma once #ifndef INTERFACE_H #define INTERFACE_H #define _CRT_SECURE_NO_WARNINGS #define FENGZHUANG_API _declspec(dllexport) #include <string> namespace FengZhuang {class FENGZHUANG_API IInterface {public:static IInterface* Cre…...

ffmpeg播放器实战(播放器流程)

1.流程图 1.main窗口创建程序窗口 程序窗口构造函数执行下面内容 2.开启播放 3.开启解码 4.开启渲染 5.反馈给ui 本文福利&#xff0c; 免费领取C音视频学习资料包学习路线大纲、技术视频/代码&#xff0c;内容包括&#xff08;音视频开发&#xff0c;面试题&#xff0c;FFmpeg…...

Android 13.0 开机过滤部分通知声音(莫名其妙的通知声音)

1.概述 在13.0的系统定制开发产品的中,有时候在系统开机的时候会有一些通知的声音,但是由于系统模块太多,也搞不清楚到底是哪个模块发出的通知声音,所以就需要从通知的流程来屏蔽这些通知声音,接下来看具体怎么实现在开机的时候过滤开机声音的功能 2.开机过滤部分通知声音…...

Adversarial Attack and Defense on Graph Data: A Survey(2022 IEEE Trans)

Adversarial Attack and Defense on Graph Data: A Survey----《图数据的对抗性攻击和防御&#xff1a;综述》 图对抗攻击论文数据库&#xff1a; https://github.com/safe-graph/graph-adversarial-learning-literature 摘要 深度神经网络&#xff08;DNN&#xff09;已广泛应…...

css中flex两列布局(一列自适应其他固定)

问题 最近写一个布局的时候&#xff0c;遇到一个问题。如下图的布局。在没有图片的时候布局是正常的&#xff0c;如果有图片且设置了width:100%;height: 100%; 则会出现图片将自适应布局撑开的情况。 我的解决方式是让图片不缩放&#xff0c;图片外层再添加一个div元素。形如…...

【深度学习】gan网络原理实现猫狗分类

【深度学习】gan网络原理实现猫狗分类 GAN的基本思想源自博弈论你的二人零和博弈&#xff0c;由一个生成器和一个判别器构成&#xff0c;通过对抗学习的方式训练&#xff0c;目的是估测数据样本的潜在分布并生成新的数据样本。 1.下载数据并对数据进行规范 transform tran…...

⑨【Stream】Redis流是什么?怎么用?: Stream [使用手册]

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ ⑨Redis Stream基本操作命令汇总 一、Redis流 …...

浙江启用无人机巡山护林模式,火灾扑救效率高

为了保护天然的森林资源&#xff0c;浙江当地林业部门引入了一种创新技术&#xff1a;林业无人机。这些天空中的守护者正在重新定义森林防火和护林工作的方式。 当下正值天气干燥的季节&#xff0c;这些无人机开始了它们的首次大规模任务。它们在指定的林区内自主巡逻&#xff…...

Starrocks异步物化视图的使用以及注意事项

最近在使用starrocks来进行实时数据项目的开发&#xff0c;尝试使用了一下starrocks的异步物化视图。 使用版本: 3.1.2-4f3a2ee 创建三个测试表, 注意只有test_mv_table1为分区表&#xff0c;其他两个都是非分区表: CREATE TABLE test_mv_table1 (periodday DATE NOT NULL CO…...

SpringBoot整合Sharding-Jdbc实现分库分表和分布式全局id

SpringBoot整合Sharding-Jdbc Sharding-Jdbc sharding-jdbc是客户端代理的数据库中间件&#xff1b;它和MyCat最大的不同是sharding-jdbc支持库内分表。 整合 数据库环境 在两台不同的主机上分别都创建了sharding_order数据库&#xff0c;库中都有t_order_1和t_order_2两张…...

「江鸟中原」有关HarmonyOS-ArkTS的Http通信请求

一、Http简介 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在Web应用程序之间进行通信的协议&#xff0c;通过运输层的TCP协议建立连接、传输数据。Http通信数据以报文的形式进行传输。Http的一次事务包括一个请求和一个响应。 Http通信是基于客户端-服…...

vuex的使用笔记

1.安装 npm安装 npm install vuexnext --saveyarn安装 yarn add vuexnext --save2.基本结构 import Vuex from vuexconst store createStore({ //状态&#xff1a;相当于vue中的data&#xff08;&#xff09; state() {return {name: 0,code:"",todos: [{ id: 1…...

汇编:关于栈的知识

1.入栈和出栈指令 2. SS与SP 3. 入栈与出栈 3.1 执行push ax ↑↑ 3.2 执行pop ax ↓↓ 3.3 栈顶超界的问题 4. 寄存器赋值 基于8086CPU编程时&#xff0c;可以将一段内存当作栈来使用。一个栈段最大可以设为64KB&#xff08;0-FFFFH&#xff09;。 1.入栈和出栈指令…...

uniapp使用map标签

在UniApp中&#xff0c;可以使用map标签来显示地图&#xff0c;并通过其属性来自定义地图的样式和行为。以下是一些常用的map标签属性&#xff1a; id&#xff1a;用于给地图组件指定一个唯一的标识符&#xff0c;方便在代码中进行引用和操作。 style&#xff1a;用来设置地图…...

MacOS14 Sonoma 安装 Flutter 开发环境

本文针对 小白用户也包括自己&#xff0c;以前都是将这些写入我的有道云笔记。为了让给多人看见或者说自己更好的浏览&#xff0c;先将其记录如下。 朋友介绍一个项目说要开发一款App&#xff0c;最近也是闲着就答应下来。主要功能是通过蓝牙BLE控制设备的一个 Iot边缘设备&…...

【Web】PHP反序列化刷题记录

目录 ①[NISACTF 2022]babyserialize ②[NISACTF 2022]popchains ③[SWPUCTF 2022 新生赛]ez_ez_unserialize ④[GDOUCTF 2023]反方向的钟 再巩固下基础 ①[NISACTF 2022]babyserialize <?php include "waf.php"; class NISA{public $fun"show_me_fla…...

C++标准模板库 STL 简介(standard template library)

在 C 语言中&#xff0c;很多东西都是由我们自己去实现的&#xff0c;例如自定义数组&#xff0c;线程文件操作&#xff0c;排序算法等等&#xff0c;有些复杂的东西实现不好很容易留下不易发现的 bug。而 C为使用者提供了一套标准模板库 STL,其中封装了很多实用的容器&#xf…...

Linux篇:文件系统

一、共识原理&#xff1a; 文件文件内容文件属性 磁盘上存储文件存文件的内容&#xff08;数据块&#xff09;存文件的属性&#xff08;inode&#xff09; Linux的文件在磁盘中存储是将属性和内容分开存储的。 二、硬件简述&#xff1a; 1. 认识硬件 磁盘&#xff1a;唯一的一…...

AI - Crowd Simulation(集群模拟)

类似鱼群&#xff0c;鸟群这种群体运动模拟。 是Microscopic Models 微观模型&#xff0c;定义每一个个体的行为&#xff0c;然后合在一起。 主要是根据一定范围内族群其他对象的运动状态决定自己的运动状态 Cohesion 保证个体不会脱离群体 求物体一定半径范围内的其他临近物…...

<JavaEE> Java中线程有多少种状态(State)?状态之间的关系有什么关系?

目录 一、系统内核中的线程状态 二、Java中的线程状态 一、系统内核中的线程状态 状态说明就绪状态线程已经准备就绪&#xff0c;随时可以接受CPU的调度。阻塞状态线程处于阻塞等待&#xff0c;暂时无法在CPU中执行。 二、Java中的线程状态 相比于系统内核&#xff0c;Java…...

AITemplate终极指南:动态形状与静态形状性能对比及选择策略

AITemplate终极指南&#xff1a;动态形状与静态形状性能对比及选择策略 【免费下载链接】AITemplate AITemplate is a Python framework which renders neural network into high performance CUDA/HIP C code. Specialized for FP16 TensorCore (NVIDIA GPU) and MatrixCore (…...

暗黑3一键宏终极指南:D3keyHelper让你的游戏效率提升300%

暗黑3一键宏终极指南&#xff1a;D3keyHelper让你的游戏效率提升300% 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑3中重复的技能按键感…...

3大智能策略:sguard_limit如何彻底解决腾讯游戏卡顿难题?

3大智能策略&#xff1a;sguard_limit如何彻底解决腾讯游戏卡顿难题&#xff1f; 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源&#xff0c;支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 你是否曾在英雄联盟的团…...

AIS_4G扩展板嵌入式驱动开发与多传感器融合实践

1. AIS_4G_EXTENSION_BOARD 硬件平台概述AIS_4G_EXTENSION_BOARD 是一款专为 AIS 4G 主控板&#xff08;基于 ESP32 的 Magellan 平台&#xff09;设计的扩展功能子板&#xff0c;采用模块化设计理念&#xff0c;集成多类工业级传感器接口与关键外设控制器。该板并非独立运行单…...

JAVA红娘交友小程序实现原理及开源uniapp代码片段

JAVA红娘交友小程序实现原理后端架构设计基于Spring Boot框架搭建RESTful API服务&#xff0c;采用Maven进行依赖管理。核心模块包括用户认证模块、匹配算法模块、即时通讯模块和数据持久化模块。数据库设计使用MySQL关系型数据库&#xff0c;主要表结构包括&#xff1a;用户表…...

HY-SRF05超声波模块的5个常见误区及优化技巧(附STM32代码)

HY-SRF05超声波模块的5个常见误区及优化技巧&#xff08;附STM32代码&#xff09; 在嵌入式开发中&#xff0c;HY-SRF05超声波模块因其成本低廉、使用简单而广受欢迎。但很多开发者在使用过程中常会遇到测量不稳定、精度不足等问题。本文将深入剖析五个最常见的误区&#xff0c…...

SystemVerilog断言(SVA)避坑指南:从‘能用’到‘好用’,我踩过的那些Glue Logic和变量延时坑

SystemVerilog断言进阶实战&#xff1a;破解Glue Logic与动态延时的工程困局 当你的SVA断言从实验室demo走向真实芯片验证时&#xff0c;总会遇到这样的时刻&#xff1a;精心编写的断言在仿真中突然失效&#xff0c;或是让仿真速度下降了30%&#xff0c;又或是变成团队里没人敢…...

STM32C8T6新手入门:用定时器中断和外部中断做一个99秒倒计时器(附完整代码)

STM32C8T6实战&#xff1a;构建高精度99秒倒计时器的5个关键步骤 第一次拿到STM32开发板时&#xff0c;我盯着那些密密麻麻的引脚发呆——这玩意儿真能做出实用的倒计时器&#xff1f;直到成功完成这个项目后才发现&#xff0c;原来从零开始构建一个稳定可靠的倒计时系统&#…...

Ollama部署Phi-3-mini完整指南:从安装到实战应用场景解析

Ollama部署Phi-3-mini完整指南&#xff1a;从安装到实战应用场景解析 1. 为什么选择Phi-3-mini-4k-instruct&#xff1f; Phi-3-mini-4k-instruct是微软推出的轻量级AI模型&#xff0c;虽然只有38亿参数&#xff0c;但在多个基准测试中表现优异。这个模型特别适合需要快速部署…...

机器学习周报三十九

文章目录摘要Abstract1.TurboDiffusion1.1 注意力改进1.2蒸馏模型1.3权重量化2 训练和推理2.1 训练阶段2.2 推理阶段3 Make It Count3.1数据集3.2损失函数总结摘要 本周阅读了清华大学的论文《TurboDiffusion: Accelerating Video Diffusion Models by 100–200 Times》&#…...