在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 ...
随机推荐
- 数学之欧拉函数 &几道poj欧拉题
欧拉函数总结+证明 欧拉函数总结2 POJ 1284 原根 #include<iostream> #include<cstdio> #include<cstring> ...
- mysql 登录中用户管理
管理员账号 root 新增普通用户 修改root密码
- bug记录_document.defaultview.getcomputedstyle()
页面中使用document.defaultview.getcomputedstyle()在火狐下取不到值. 原本方法现在$(document).ready()中,换到window.onload里就可以 ...
- HUST 1352 Repetitions of Substrings(字符串)
Repetitions of Substrings Description The “repetitions” of a string S(whose length is n) is a maximu ...
- iOS应用性能调优的4个建议和技巧
任何一个能在用户手机屏幕中占有一席之地的iOS app都包含3个关键因素:想法好.设计出色.性能卓越.本文将分享一些iOS应用性能调优的4个建议和技巧. Tip #1:把图片资源压缩到最小. i ...
- 关于css的hack问题
<!--[if <keywords>? IE <version>?]> HTML代码块 <![endif]--> 取值: <keywords> ...
- HTML 概述
一.hello world<!--根标签--><html> <!--头部--> <head> <!--标题标签--> <title&g ...
- finally语句包含return的情况
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- 1.Perl 多线程:Threads
详情可查看: perldoc threads 调用线程的方法: $thr = threads->create(FUNCTION, ARGS) #This will create a new th ...
- redis持久化探究
redis支持两种持久化方式,一种是RDB方式,另一种是AOF方式.redis3.0windows版本默认关闭AOF(appendonly no),而开启RDB,当达到一定条件时,redis就会将内存 ...