VS2022,lib调用dll工程的一个函数

lib工程本身是一个静态库工程,没有链接器设置。然而,我们依然可以在lib工程中调用DLL工程中的函数,只需要确保头文件正确导入,并在最终使用lib的可执行文件项目中正确链接DLL的.lib文件。下面是一个详细的步骤说明:

假设的工程结构

假设有以下项目:

  1. DLL工程 (DLLProject)
  2. 静态库工程 (LibProject)
  3. 可执行文件工程 (ExeProject)

步骤

1. 在DLL工程中定义和导出函数

DLLProject.h

#pragma once
#ifdef BUILDING_DLL
#define DLL_PUBLIC __declspec(dllexport)
#else
#define DLL_PUBLIC __declspec(dllimport)
#endifextern "C" DLL_PUBLIC int func1();

DLLProject.cpp

#include "DLLProject.h"int func1() {return 42;
}

在这个DLL工程中添加预处理器:右键工程,点击属性
在这里插入图片描述
在这里插入图片描述
写完之后,#define DLL_PUBLIC __declspec(dllexport)就会生效。
Lib工程不需要这样做,所以,Lib工程的#define DLL_PUBLIC __declspec(dllimport)这个会生效

2. 在静态库工程中包含DLL工程的头文件并使用函数

LibProject.cpp

#include "DLLProject.h"void useFunc() {int result = func1();// 使用 result 进行进一步处理
}
3. 在可执行文件工程中配置链接和调用

在可执行文件工程中,需要链接DLL的.lib文件以及静态库的.lib文件。

main.cpp

#include <iostream>
#include "DLLProject.h"
#include "LibProject.h" // 包含静态库工程的头文件int main() {useFunc(); // 调用静态库中的函数,它内部调用了DLL中的函数int result = func1(); // 直接调用DLL中的函数std::cout << "Result from func1: " << result << std::endl;return 0;
}

可执行文件工程设置

  1. 包含路径

    • 在项目属性 -> VC++目录 -> 包含目录中,添加DLL工程和静态库工程的头文件路径。
  2. 库目录

    • 在项目属性 -> VC++目录 -> 库目录中,添加DLL工程和静态库工程生成的lib文件路径。
  3. 附加依赖项

    • 在项目属性 -> 链接器 -> 输入 -> 附加依赖项中,添加DLL生成的lib文件(例如DLLProject.lib)和静态库生成的lib文件(例如LibProject.lib)。

配置示例

假设目录结构如下:

/path/to/your/projects/
│
├── DLLProject/
│   ├── include/
│   │   └── DLLProject.h
│   ├── src/
│   │   └── DLLProject.cpp
│   ├── build/
│   │   ├── Debug/
│   │   │   ├── DLLProject.dll
│   │   │   └── DLLProject.lib
│   │   └── Release/
│   │       ├── DLLProject.dll
│   │       └── DLLProject.lib
│
├── LibProject/
│   ├── include/
│   │   └── LibProject.h
│   ├── src/
│   │   └── LibProject.cpp
│   ├── build/
│   │   ├── Debug/
│   │   │   └── LibProject.lib
│   │   └── Release/
│   │       └── LibProject.lib
│
└── ExeProject/├── include/│   └── LibProject.h├── src/│   └── main.cpp├── build/│   ├── Debug/│   └── Release/

ExeProject的项目设置

  1. 包含路径

    • 在项目属性 -> VC++目录 -> 包含目录中,添加/path/to/your/projects/DLLProject/include/path/to/your/projects/LibProject/include
  2. 库目录

    • 在项目属性 -> VC++目录 -> 库目录中,添加/path/to/your/projects/DLLProject/build/Debug/path/to/your/projects/LibProject/build/Debug
  3. 附加依赖项

    • 在项目属性 -> 链接器 -> 输入 -> 附加依赖项中,添加DLLProject.libLibProject.lib

通过这些步骤,你应该能够在静态库工程中使用从DLL导入的函数,并在可执行文件工程中正确链接和调用这些函数。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Keil5移植LVGL,懂得原理之后什么开发板都可以移植

今天我们来移植一下LVGL&#xff0c;其实LVGL和Qt差不多&#xff0c;操作起来都很简单&#xff0c;看着官方文档都可以自己学习使用。 难就难在移植上面&#xff0c;移植个LVGL花了我三天才弄明白&#xff08;虽然最后发现在一个很弱智的问题上耽误了我两天&#xff09;&#…

AI大模型时代必须关注的数据库 DuckDB1.0 正式发布

开源数据库DuckDB1.0 经过内部6年的打磨&#xff0c;积累了30万行代码&#xff0c;1.8万star&#xff0c;2024.06.03号正式发布了1.0版本&#xff08;代号 Snow Duck&#xff09;。 我们新一代程序员&#xff0c;没能见证MySQL 1.0、PostgreSQL 1.0、Windows 1.0、Linux 1.0、…

HTML跳动的爱心

目录 写在前面 HTML简介 程序设计 修改文字 推荐系列 写在后面 写在前面 本期小编给大家分享可以写字的html动态爱心代码&#xff0c;一起来看看叭~ HTML简介 HTML&#xff08;HyperText Markup Language&#xff09;是一种用于创建网页的标记语言。它是互联网的基础&…

Etcd Raft架构设计和源码剖析1:宏观架构

Etcd Raft架构设计和源码剖析1&#xff1a;宏观架构 | Go语言充电站 序言 Etcd提供了一个样例contrib/raftexample&#xff0c;用来展示如何使用etcd raft。这篇文章通过raftexample介绍如何使用etcd raft。 raft服务 raftexample是一个分布式KV数据库&#xff0c;客户端可…

三十六、openlayers官网示例Earthquake Clusters解析——在聚合图层鼠标触摸显示五角星

官网demo地址&#xff1a; Earthquake Clusters 这篇展示了鼠标触摸聚合图层点位显示五角星的效果。 首先是初始化地图&#xff0c;加载了一个KML格式的矢量数据源&#xff0c;extractStyles为false表示不从kml数据源中提取样式。使用Select添加了鼠标选中的交互事件 vector …

《微服务大揭秘:SpringBoot与SpringCloud的魔法组合》

加入我们的探险队伍&#xff0c;一起深入SpringBoot与SpringCloud构建的微服务世界。以轻松幽默的笔触&#xff0c;带你一步步揭开微服务架构的神秘面纱&#xff0c;从服务发现的智能地图Eureka&#xff0c;到API网关Zuul的城市门卫&#xff0c;每一个环节都充满了惊喜。不仅如…

htb_solarlab

端口扫描 80,445 子域名扫描 木有 尝试使用smbclient连接445端口 Documents目录可查看 将Documents底下的文件下载到本地看看 xlsx文件里有一大串用户信息&#xff0c;包括username和password 先弄下来 不知道在哪登录&#xff0c;也没有子域名&#xff0c;于是返回进行全端…

chat4-Server端保存聊天消息到mysql

本文档描述了Server端接收到Client的消息并转发给所有客户端或私发给某个客户端 同时将聊天消息保存到mysql 服务端为当前客户端创建一个线程&#xff0c;此线程接收当前客户端的消息并转发给所有客户端或私发给某个客户端同时将聊天消息保存到mysql 本文档主要总结了将聊天…

UnityAPI学习之游戏物体的方法使用

目录 游戏物体 创建游戏物体的三种方式 组建的获取和查找 游戏物体的方法与其他成员变量 游戏物体的生成 游戏物体的激活状态/标签(tag)/层级(layer) 游戏物体的激活与失活 游戏物体的查找 1. 名称查找(Find) 2. 通过标签查找游戏物体&#xff08;FindGameObjectWithT…

v1.2.70-FastJson的AutoType机制研究

v1.2.70-FastJson的AutoType机制研究 最近在对接Alexa亚马逊语音技能&#xff0c;Smart Home Skill Apis时&#xff0c;有一个配置的JSON字符串是这样的&#xff1a; { "capabilityResources": {"friendlyNames": [{"type": "asset",…

json和axion结合

目录 java中使用JSON对象 在pom.xml中导入依赖 使用 public static String toJSONString(Object object)把自定义对象变成JSON对象 json和axios综合案例 使用的过滤器 前端代码 响应和请求都是普通字符串 和 请求时普通字符串&#xff0c;响应是json字符串 响应的数据是…

使用 Django 连接 MySQL 数据库

文章目录 步骤一&#xff1a;安装必要的库和驱动步骤二&#xff1a;配置数据库连接步骤三&#xff1a;执行数据库迁移步骤四&#xff1a;开始使用 MySQL 数据库创建一个模型迁移模型到数据库使用模型进行数据操作创建新记录&#xff1a;查询记录&#xff1a;更新记录&#xff1…

基于百度接口的实时流式语音识别系统

目录 基于百度接口的实时流式语音识别系统 1. 简介 2. 需求分析 3. 系统架构 4. 模块设计 4.1 音频输入模块 4.2 WebSocket通信模块 4.3 音频处理模块 4.4 结果处理模块 5. 接口设计 5.1 WebSocket接口 5.2 音频输入接口 6. 流程图 程序说明文档 1. 安装依赖 2.…

Element ui图片上传

前言 对于广大小白来说&#xff0c;图片上传简直是上传难&#xff0c;难于上青天&#xff01;废话不多说&#xff0c;步入正题&#xff0c;您就瞧好吧&#xff01; 步骤一&#xff1a;前端使用element ui组件&#xff08;upload上传&#xff09; 我个人喜欢使用第二个组件&a…

运放应用1 - 反相放大电路

1.前置知识 反相放大电路存在 负反馈电路 &#xff0c;工作在线性区&#xff0c;可以利用 虚短 概念来分析电路。 注&#xff1a;运放的 虚断 特性是一直存在的&#xff0c;虚短特性则需要运放工作在 线性区 有关运放的基础知识&#xff0c;可以参考我的另外一篇文章&#xff…

BGP基础配置

BGP 邻居关系建立&#xff0c;与路由条目宣告是分开的配置的 1)直连的 EBGP 邻居关系建立 [r1]bgp1 启动 BGP 协议&#xff0c;启动时需要键入 AS号&#xff1b;没有多进程概念 [r1-bgp]router-id 1.1.1.1 建议配置 RID;若不配置将自动生成一规则同 OSPF 相同 [r1-bgp]pe…

门面模式Api网关(SpringCloudGateway)

1. 前言 当前通过Eureka、Nacos解决了服务注册和服务发现问题&#xff0c;使用Spring Cloud LoadBalance解决了负载均衡的需求&#xff0c;同时借助OpenFeign实现了远程调用。然而&#xff0c;现有的微服务接口都直接对外暴露&#xff0c;容易被外部访问。为保障对外服务的安全…

【kubernetes】探索k8s集群的pod控制器详解(Deployment、StatefulSet、DaemonSet、Job、CronJob)

目录 一、Pod控制器及其功用 二、pod控制器有多种类型 2.1ReplicaSet 2.1.1ReplicaSet主要三个组件组成 2.2Deployment 2.3DaemonSet 2.4StatefulSet 2.5Job 2.6Cronjob 三、Pod与控制器之间的关系 3.1Deployment 3.2SatefulSet 3.2.1StatefulSet三个组件 3.2.2为…

引擎:UI

一、控件介绍 Button 按钮 创建一个按钮 按钮禁用 精灵模式 颜色模式 缩放模式 绑定点击事件 EditBox 输入框 Layout 布局 支持水平排列、垂直排列、背包排列 PageView 页面视图 ProgressBar 进度条 RichText 富文本 绑定点击事件 事件可以被其它标签包裹 图文混排 Scroll…

Redis位图

简介 在我们平时开发过程中&#xff0c;会有一些bool型数据需要存取&#xff0c;比如用户一年的签到记录&#xff0c;签了是1&#xff0c;没签是0&#xff0c;要记录365天。如果使用普通的key/value&#xff0c;每个用户要记录365个&#xff0c;当用户上亿的时候&#xff0c;需…