• VS2008 动态库和静态库的生成和加载


     

    第一:动态库和静态库的生成:

    1) 新建一个生成dll工程:

      文件->新建->项目->Win32->Win32控制台应用程序

      输入项目名称:dllTest ,项目路径:D:VC

      确定

      下一步

      应用程序类型:选择DLL

      完成

    2) 编写代码: 

    2-1) 增加一个头文件:dllTest.h


    #define ICILIB_UTIL_API __declspec(dllexport)  //生成动态库时,同时在Debug或Release目录下生成.lib和.dll文件.


    class ICILIB_UTIL_API CdllTest  //如果把#define ICILIB_UTIL_API __declspec(dllexport)屏蔽掉.把ICILIB_UTIL_API去掉,编译只会生成.dll而没有.lib文件.
    {
    public:
     CdllTest();
     ~CdllTest();
    public:
     int sum(int a,int b);
    };

    2-2) dllTest.cpp文件里添加内容:

    // dllTest.cpp : 定义 DLL 应用程序的导出函数。
    //

    #include "stdafx.h"
    #include "dllTest.h"

    CdllTest::CdllTest()
    {

    }

    CdllTest::~CdllTest()
    {

    }

    int CdllTest::sum(int a, int b)
    {
     return (a+b);
    }

    3) 设置生成dll动态库:

      项目->属性->配置属性->常规->配置类型->动态库(.dll)

    4) 编译,重新生成(编译信息如下):

    1>------ 已启动全部重新生成: 项目: dllTest, 配置: Debug Win32 ------
    1>正在删除项目“dllTest”(配置“Debug|Win32”)的中间文件和输出文件
    1>正在编译...
    1>stdafx.cpp
    1>正在编译...
    1>dllTest.cpp
    1>正在编译...
    1>dllmain.cpp
    1>正在创建库...
    1>生成日志保存在“file://d:VCdllTestdllTestDebugBuildLog.htm”
    1>dllTest - 0 个错误,0 个警告
    ========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

      这样,就会在D:VCdllTestDebug目录下生成dllTest.lib和dllTest.dll了.

    其它) 另:编译静态库时.只需把第3)步改成:项目->属性->配置属性->常规->配置类型->静态库(.lib) 后,重新编译一下就OK了.

      这样,就会在D:VCdllTestDebug目录下生成dllTest.lib(注意.这个.lib与前面动态库的.dll不一样,前者含内容和符号,后者只是符号表明内容在哪里)了.

    第二:动态库和静态库的加载:

    1) 新建一个测试dll或lib的工程:

      文件->新建->项目->Win32->Win32控制台应用程序

      输入项目名称:dllTest Main,项目路径:D:VC

      确定

      下一步

      应用程序类型:选择控制台应用程序

      完成

    2) 编写代码: 

    // dllTestMain.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include <stdio.h>
    #include "../../dllTest/dllTest/dllTest.h" // linux 上用"/",而windows上可用"/"或"" .


    int _tmain(int argc, _TCHAR* argv[])
    {
     int c = 0;
     CdllTest t;

     c = t.sum(3,2);
     printf("c = %d ",c);
     return 0;
    }

    3) 设置生成dll动态库:

      项目->属性->配置属性->链接器->输入->附加依赖项->../../dllTest/Debug/dllTest.lib

      这个lib无论是静态还是动态都是这样加进来.

    1>------ 已启动全部重新生成: 项目: dllTestMain, 配置: Debug Win32 ------
    1>正在删除项目“dllTestMain”(配置“Debug|Win32”)的中间文件和输出文件
    1>正在编译...
    1>stdafx.cpp
    1>正在编译...
    1>dllTestMain.cpp
    1>正在编译资源清单...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation.  All rights reserved.
    1>正在链接...
    1>LINK : 没有找到 D:VCdllTestMainDebugdllTestMain.exe 或上一个增量链接没有生成它;正在执行完全链接
    1>   正在创建库 D:VCdllTestMainDebugdllTestMain.lib 和对象 D:VCdllTestMainDebugdllTestMain.exp
    1>正在嵌入清单...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation.  All rights reserved.
    1>生成日志保存在“file://d:VCdllTestMaindllTestMainDebugBuildLog.htm”
    1>dllTestMain - 0 个错误,0 个警告
    ========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========

    5)用cmd程序 运行:

    5-1) 动态库时:

      会弹出"没有找到 dllTest.dll,因此这个应用程序未能启动.重新安装应用程序可能修复此问题"的对话框.

      是因为没有找到动态库.需要把刚才生成的dllTest.dll放到dllTestMain.exe同一个目录下.再运行.发现运行成功.

    5-2) 静态库时:

      运行成功

  • 相关阅读:
    属性包装
    生成器
    迭代器
    深拷贝-浅拷贝
    装饰器-wrapper
    类别不均衡
    参数优化-学习曲线
    参数优化-验证曲线
    参数优化-API
    D. Number Of Permutations 符合条件的排列种类
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4504844.html
Copyright © 2020-2023  润新知