在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 ...
 
随机推荐
- shell脚本学习(三)
			
1.在grep中, ^标记着单词的开始, $ 标记着单词的结束. 查看一个单词是否在linux自带的词典中,脚本如下: #bin/sh #文件名:checkword.sh word=$1 grep & ...
 - Twitter Storm源代码分析之Nimbus/Supervisor本地目录结构
			
storm集群里面工作机器分为两种一种是nimbus, 一种是supervisor, 他们通过zookeeper来进行交互,nimbus通过zookeeper来发布一些指令,supervisor去读z ...
 - HDU1503:Advanced Fruits(LCS)
			
Problem Description The company "21st Century Fruits" has specialized in creating new sort ...
 - JQuery 阻止事件冒泡
			
JQuery 提供了两种方式来阻止事件冒泡. 方式一:event.stopPropagation(); $("#div1").mousedown(function(event){ ...
 - iOS之网络编程
			
发送HTTP请求的方法 在HTTP/1.1协议中,定义了8种发送http请求的方法 GET.POST.OPTIONS.HEAD.PUT.DELETE.TRACE.CONNECT.PATCH 根据HTT ...
 - PHP class which generates PDF files from UTF-8 encoded HTML
			
http://www.mpdf1.com/mpdf/index.php
 - go pkg
			
fmt Scanln用来读取输入数据 示例: package main import ( "fmt" "os" "time" ) func ...
 - 如何在Eclipse和MyEclipse中安装SVN
			
在安装目录下,找到dropins文件夹将svn文件复制进去.
 - java代理的深入浅出(一)-Proxy
			
java代理的深入浅出(一)-Proxy 1.什么是代理 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事 ...
 - win7下将dll文件的打开方式改回系统默认
			
打开注册表,定位到HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.dll把除OpenWit ...