【DLL相关】实现函数的DLL封装,并在另一个项目中调用

摘要:
直接给出以下步骤:====================函数的DLL封装===============1.创建第一个项目:win32控制台程序,应用程序类型:DLL,其他选项:导出符号(名称:double_DLL)2.double_ DLL。在h_DDLL_APIintdoublefun(int)中添加函数定义externalDOUBLE;//DOUBLE_DLL_ API根据项目名称而变化。cpp添加函数实数

直接给出步骤:

===========函数的DLL封装===========

1.创建第一个项目:win32控制台程序,应用程序类型:DLL,附加选项:导出符号(命名:double_dll)

2.double_dll.h中加入函数定义
   extern DOUBLE_DLL_API int doublefun(int);//DOUBLE_DLL_API 根据项目名称不同而不同

3.double_dll.cpp加入函数实现
 extern DOUBLE_DLL_API int doublefun(int x)//DOUBLE_DLL_API 根据项目名称不同而不同
 {
  return 2*x;
 }

4.编译(产生的将是dll、lib文件,不是应用程序)

注:如果用Dependency Walker可以在编译后生成的double_dll.dll中看到int doublefun(int),那么说明我们已经把函数doublefun封装进dll,剩下的就是阐述如何在另外一个项目中调用这个dll文件中的函数。

===========调用DLL文件中的函数===========

1.创建第二个项目:普通的win32空项目(命名:call_doublefun)

2.把第一个项目编译后产生的.h放入与第二个项目的.cpp文件同一目录(方便include)

3.把第一个项目编译后产生的.dll和.lib放入第二个项目的Debug(就是应用程序的出生地)

4.设置:链接器-常规-附加库目录XXX\Projects\call_doublefun\Debug(这里的“XXX”所指代的大家都明白的)

5.设置:链接器-输入-附加依赖项double_dll.lib

6.在第二个项目的cpp文件的合适位置加入两句话

   第一句#include "double_dll.h"
   第二句extern _declspec(dllimport) int doublefun(int); 

举例:

#include <iostream>
#include "double_dll.h"
using namespace std;
extern _declspec(dllimport) int doublefun(int); 
void main()
{
 int x=0;
 cout<<"Please input X:";
 cin>>x;
 cout<<"2*X=";
 cout<<doublefun(x)<<endl;
}

参考:http://www.php18.com/tutorial-3150.html

免责声明:文章转载自《【DLL相关】实现函数的DLL封装,并在另一个项目中调用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇字符串哈希C# 使用反射获取界面并传参下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

gprof的使用介绍

转于:http://blog.chinaunix.net/uid-25194149-id-3215487.html #不知道这是在哪里找的了,感谢各位~性能分析工具gprof介绍Ver:1.0目录1. GPROF介绍 42. 使用步骤 43. 使用举例 43.1 测试环境 43.2 测试代码 43.3 数据分析 53.3.1 flat profile模式...

YAML-CPP

yaml作为一种便捷的文件格式,通过C++进行操作时,可以利用yaml-cpp进行。 一、yaml-cpp的安装 下载源代码 git clone https://github.com/jbeder/yaml-cpp.git 编译安装 mkdir build cd build cmake -DBUILD_SHARED_LIBS=ON .. # ON...

Android 的窗口管理系统 (View, Canvas, WindowManager)

http://blog.csdn.net/ritterliu/article/details/39295271 From漫天尘沙 在图解Android - Zygote 和 System Server 启动分析一 文里,我们已经知道Android 应用程序是怎么创建出来的,大概的流程是 ActivityManagerService -> Zygote...

Linux等待队列原理与实现

当进程要获取某些资源(例如从网卡读取数据)的时候,但资源并没有准备好(例如网卡还没接收到数据),这时候内核必须切换到其他进程运行,直到资源准备好再唤醒进程。 waitqueue (等待队列) 就是内核用于管理等待资源的进程,当某个进程获取的资源没有准备好的时候,可以通过调用  add_wait_queue() 函数把进程添加到  waitqueue 中,然...

Qt FFMPEG+OpenCV开启摄像头

//ffmpegDecode.h #ifndef __FFMPEG_DECODE_H__ #define __FFMPEG_DECODE_H__ #include "global.h" extern "C" { #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" /...

Side by Side Assembly介绍--manifest文件的使用

什么是Side-by-Side Assembly? Side-by-Side Assembly(建称SxS)是微软在Visual Studio 2005(Windows 2000?)中引入的技术,用来解决Windows平台上的DLL Hell问题。DLL Hell的介绍可以看Wikipedia的文章。简单的说,DLL Hell窘境包括了Windows应用程...