在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 ...
随机推荐
- OpenCV2.x自学笔记——形态学运算
名称 标识符 作用 原理 腐蚀 MORPH_ERODE 膨胀 MORPH_DILATE 开运算 MORPH_OPEN 消除细白点 先腐蚀后膨胀 闭运算 MORPH_CLOSE 消除小黑洞 先膨胀后腐蚀 ...
- ElasticSearch(3)-原理
参考文档: http://learnes.net/distributed_crud/bulk_requests.html 一.分布式集群 1.1 空集群 单台机器,其中没有数据,也没有索引. 集群中一 ...
- HDU 2209 翻纸牌游戏(DFS)
题目链接 Problem Description 有一种纸牌游戏,很有意思,给你N张纸牌,一字排开,纸牌有正反两面,开始的纸牌可能是一种乱的状态(有些朝正,有些朝反),现在你需要整理这些纸牌.但是麻烦 ...
- SQL 列提取组成字符串
SELECT BussinessNo = STUFF(REPLACE(REPLACE((SELECT N.business_no FROM T_delegate_list N WHERE N.g_mo ...
- js 弹出 隐藏层和cookie
<script type="text/javascript"> function checkCookie(show_div, bg_div) { var smtstk ...
- NTFS 读写高手进阶 - Windows 格式硬盘 Mac存文件 开启 ...(转载)
常识: 硬盘格式: FAT32 - WIndows 硬盘分区格式, 有点通用性高, 缺点不支持单个大于 4G 的文件. exFAT - Windows 硬盘分区格式, 兼容性低. 稳定性不如 FAT3 ...
- ***1133. Fibonacci Sequence(斐波那契数列,二分,数论)
1133. Fibonacci Sequence Time limit: 1.0 secondMemory limit: 64 MB is an infinite sequence of intege ...
- C#第四天
2.类语法:[public] class 类名{ 字段; 属性; 方法;}写好了一个类之后,我们需要创建这个类的对象,那么,我们管创建这个类的对象过程称之为类的实例化.使用关键字 n ...
- 项目中 添加 swift代码 真机调试 错误
错误: dyld: Library not loaded: @rpath/libswiftCore.dylib Referenced from: /private/var/mobile/Contain ...
- 阅读《大道至简第一章》读后感(java伪代码)
大道至简讲述的是软件工程实践者的思想,书的第一章引用了著名的----愚公移山这一历史故事,向我们讲述了编程的精义.汤问篇中所述的愚公移山这一事件,我们看到了原始需求的产生---“惩山北之塞,出入之迂” ...