zoukankan      html  css  js  c++  java
  • VS2013环境生成和调用DLL动态链接库

    创建动态库方法:
    创建动态库是生成 .dll .lib 两个个文件

    文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLGenerator

    应用程序类型:DLL  附加选项:空项目
     
    建立源文件dllgenerator.cpp(不需要主函数,只写你需要动态调用的函数)
     
    1. // 整数加法和乘法  
    2. int Add(int a, int b){  
    3. return a + b;  
    4. }  
    5. int Mul(int c, int d){  
    6. return c * d;  
    7. }  
    建立头文dllgenerator.h(一定要把函数声明写好)
     
    1. int Add(int, int);  
    2. int Mul(int, int);  
    建立源文件dllmain.cpp(一定要包含#include<windows.h>)
        - 下面的函数是VS2013自动生成,没生成复制即可。其实是在创建工程项目时不选空项目时候vs自动生成的,但不选空项目会产生很多其他文件和依赖项,本文教你建立最纯净的工程,注意包含window.h
     
    1. // dllmain.cpp : 定义 DLL 应用程序的入口点。  
    2. #include <windows.h>  
    3. BOOL APIENTRY DllMain(HMODULE hModule,  
    4. DWORD  ul_reason_for_call,  
    5. LPVOID lpReserved  
    6. )  
    7. {  
    8. switch (ul_reason_for_call)  
    9. {  
    10. case DLL_PROCESS_ATTACH:  
    11. case DLL_THREAD_ATTACH:  
    12. case DLL_THREAD_DETACH:  
    13. case DLL_PROCESS_DETACH:  
    14. break;  
    15. }  
    16. return TRUE;  
    17. }  
    建立源文件Source.def
        - 建立方式如下图,选择 VisualC++ -> 模块定义文件(.def)
        - 在此文件第一行引号中填你的项目名称即可,EXPORTS下面列出要生成的函数名称 格式:“名称 @序号”)
    [cpp] view plain copy
     
    1. LIBRARY "DLLGenerator"  
    2. EXPORTS  
    3.      Add @1  
    4.      Mul @2  
     
    点击菜单栏 生成 -> 生成解决方案 或者 按Ctrl+F5
    输出栏显示 创建库 DLLGenerator.lib 和 生成 DLLGenerator.dll
     
    lib文件里面有对dll文件的描述,所以生成的dll文件不要改名称,否则lib文件和dll文件无法对应
    在项目方案目录里,Debug文件夹中可以找到DLLGenerator.lib 和 DLLGenerator.dll, 把这两个文件和工程的头文件(dllgenerator.h)移动到一个空文件夹(E:dlltestDLL)中,以后你的项目用到此dll就包含这个目录,至此动态库创建完毕。
     
     
    项目调用动态库方法如下:
    调用动态库是调用 .dll .lib .h 三个文件
    文件 -> 新建 -> 项目 -> win32控制台应用程序 项目名称:DLLTestor
    应用程序类型:控制台应用程序  附加选项:空项目
     
    打开项目 -> 项目属性 -> 配置属性 -> VC++目录 -> 包含目录 加入DLLGenerator.h所在目录的绝对路径 (E:dlltestDLL),以分号间隔
    打开项目 -> 项目属性 -> 配置属性 -> VC++目录 -> 库目录 加入DLLGenerator.lib所在目录的绝对路径 (E:dlltestDLL)
     
    打开项目 -> 项目属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项 中填上DLLGenerator.lib(以分号间隔),点击右下角 应用 确定
     
    工程调用dll时首先在工程文件目录中查找dll,找不到后在C:WindowsSystem32 中找。所以我们自己项目简单调用dll时就把生成的dll文件复制到工程目录中,如果经常用可以把dll文件放到C:WindowsSystem32中
     
    新建源文件main.cpp
    [cpp] view plain copy
     
    1. #include<iostream>  
    2. #include"dllgenerator.h"  
    3. using namespace std;  
    4. int main(){  
    5. int a = 2;  
    6. int b = 3;  
    7. cout << Add(a, b) << endl;  
    8. cout << Mul(a, b) << endl;  
    9. }  
    点击菜单栏,调试 -> 开始执行(不调试)  或者按F5
    运行结果:
    至此调用动态库成功。
     
    ---------------End-----------------
  • 相关阅读:
    Enterprise Library Policy Injection Application Block 之三:PIAB的扩展—创建自定义CallHandler(提供Source Code下载)
    一首最好听的足球队歌,见证往日的辉煌
    WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance
    WCF后续之旅(9): 通过WCF双向通信实现Session管理[下篇]
    WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成
    WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成
    ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline Part II
    WCF后续之旅(9):通过WCF的双向通信实现Session管理[上篇]
    WCF后续之旅(1): WCF是如何通过Binding进行通信的
    Enterprise Library Policy Injection Application Block 之二: PIAB设计和实现原理
  • 原文地址:https://www.cnblogs.com/byteHuang/p/8116751.html
Copyright © 2011-2022 走看看