在DLL中导出另一静态库中的函数
开发环境:
win7_x64、VS2013
应用场景:
动态库A依赖动态库B,而动态库B又使用了静态库C;有些情况下,我们需要将C从B里面导出,然后提供给A使用。
正文:
Step1:
1、新建测试静态库TestStatic
2、添加TestA.h、TestA.cpp、TestB.h和Testb.cpp文件
3、添加以下代码导出TestA类和testB函数
TestA.h
#pragma once
#if defined _Use_Static_Export_
#define _Static_Export_ _declspec(dllexport)
#elif defined _Use_Static_Import
#define _Static_Export_ _declspec(dllimport)
#else
#define _Static_Export_
#endif
class TestA {
public:
_Static_Export_ TestA();
_Static_Export_ ~TestA();
_Static_Export_ int test();
_Static_Export_ void testb();
};
TestA.cpp
#include "TestA.h"
TestA::TestA() { int i = 10; }
TestA::~TestA() { int i = 10; }
int TestA::test() { return 10; }
void TestA::testb() {}
TestB.h
#pragma once
#if defined _Use_Static_Export_
#ifndef _Static_Export_
#define _Static_Export_ __declspec(dllexport)
#endif
#elif defined _Use_Static_Import
#ifndef _Static_Export_
#define _Static_Export_ __declspec(dllimport)
#endif
#else
#ifndef _Static_Export_
#define _Static_Export_
#endif
#endif
namespace Test {
_Static_Export_ void testB();
}
TestB.cpp
#include "TestB.h"
namespace Test {
void testB() {}
}
Step2:新建测试动态库TestDll
1、在TestDll.cpp文件中添加以下代码,从当前DLL中导出TestA类和test函数
TestDll.cpp
#define _Use_Static_Export_
#include "./../TestStatic/TestA.h"
#include "./../TestStatic/TestB.h"
void dll_export()
{
TestA a;
Test::testB();
}
Step3:编译项目TestStatic和项目TestDll,在生成的TestDll.dll中可利用DEPENDS.EXE工具查看导出函数
在DLL中导出另一静态库中的函数的更多相关文章
- C++静态库中使用_declspec(dllexport) 不能导出函数的问题
在某项目中,有一些静态库,这些静态库中有类型命名的函数GET_XXX.在一次项目结构调整的时候,我想将调用这静态库的代码编译成DLL,并且将这些Get函数导出,我就直接就这些函数前面添加了_decls ...
- 在共享DLL中使用MFC 和在静态库中使用MFC的区别
使用VS2008,在项目属性中有一项MFC的使用,有三种设置: 1.使用标准Windows库 2.在共享DLL中使用MFC 3.在静态库中使用MFC 第一种顾名思义. ...
- MFC的使用——在共享DLL中使用MFC、在静态库中使用MFC(转)
原文转自 https://blog.csdn.net/albertsh/article/details/52838419 1.使用标准Windows库 使用WINDOWS SDK API库,不使用MF ...
- 如何让静态库中的可执行程序不调用的函数不链接进该可执行程序?(-ffunction-sections -Wl,--gc-sections)
关键词: -Wl,--gc-sections -ffunction-sections 链接 elf 库 有时我们会遇到这种情况,可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使 ...
- iOS 静态库中使用宏定义区分iPhone模拟器与真机---备用
问题描述 一般项目中,可以使用宏定义来判断模拟器还是真机,这无疑是有效的. #if TARGET_IPHONE_SIMULATOR #define SIMULATOR 1 #elif TARGET_O ...
- 解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题
解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题 在原来项目中导入全志v3相机的 ...
- iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用
iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用 前言 开发中经常使用三方库去实现某特定功能,而这些三方库通常又分为开源库和闭源库.开源库可以直接拿到源码,和自 ...
- linux C 刚初始化后的一个变量在调用一个静态库中函数后被异常修改为乱码
linux C 中声明并初始化一个变量const char a[512]="test";后,接着调用了一个静态库中的函数函数test(b);,a并没有传入test函数,但在调用这个 ...
- NSClassFromString 实例话静态库中的类
Class myClass = NSClassFromString("StaticLibyClassName"); StaticLibyClassName是从静态库中实例化一个Cl ...
随机推荐
- 单尺度二维离散小波分解dwt2
clc,clear all,close all; load woman; [cA,cH,cV,cD]=dwt2(X,'haar');%单尺度二维离散小波分解.分解小波函数haar figure,ims ...
- 转 gl_VertexID的含义
#version //layout(location = 0) in vec4 VERTEX; uniform mat4 MODEL_MATRIX; uniform mat4 VIEW_MATRIX; ...
- poj 1687 Buggy Sat 简单计算几何
暑期集训出的第一道一血 感觉自己萌萌哒…… 这道题本身并没有坑点 仅仅是翻译巨坑…… 解大腿在做B 安学长在做E 我闲着也没事 就一个词一个词翻译F…… 最后感觉…… 题干大多数都看不懂…… 也都没啥 ...
- word异常关闭,找到丢失的word
Word模板路径位置 XP系统用户默认模板路径一般在 C:\Documents and Settings\Administrator\Application Data\Microsoft\Templa ...
- hosts文件失效,配置的域名不能成功访问
在windows7系统 hosts文件中配置域名 出现hosts文件失效 并不能正常访问域名 可能并不适用所有的这样的情况 但是我自己修改了dns的服务器的状态 就可以正常访问 如下图所示
- Python 查找binlog文件
经常需要在 binlog 中查找一些日志信息,于是写了一个简单的脚本.对于非常巨大的 binlog 文件,该脚本可能会速度慢,毕竟还是用的 list,暂时没想到好办法. 详细看代码: #/usr/bi ...
- JPA基本注解介绍
一.@Entity •@Entity 标注用于实体类声明语句之前, 指出该Java 类为实体类,将映射到指定的数据库表. 如声明一个实体类 Customer,它将映射到数据库中的 customer 表 ...
- .NET技术+25台服务器怎样支撑世界第54大网站
摘要:同时使用Linux和Windows平台产品,大量使用静态的方法和类,Stack Overflow是个重度性能控.同时,取代横向扩展,他们坚持着纵向扩展思路,因为“硬件永远比程序员便宜”. Sta ...
- mybatis---------insert,delete ,update的批量操作
在数据量大的情况下,可以使用批量 提高性能 批量插入insert 方法一: <insert id="insertbatch" parameterType="java ...
- 《Windows驱动开发技术详解》之读写操作
缓冲区方式读写操作 设置缓冲区读写方式: