windows系统下可执行程序调用lib静态库和dll动态库的方法

原创 2017年01月12日 10:38:08

1、windows系统下可执行程序调用lib静态库的方法

#pragma comment(lib,"Ws2_32.lib")//表示链接Ws2_32.lib这个库。
这种方法和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的程序别人在使用你的代码的时候就不用再设置工程settings了。告诉连接器连接的时候要找ws2_32.lib,这样你就不用在linker的lib设置里指定这个lib了。

用法示例:
#include "Mwic_32.h"
#pragma comment(lib,"Mwic_32.lib")
包含对应的头文件和指定lib库,就不需要在project setting里面设置了,程序能自动引用Mwic_32.lib静态库文件。


2、windows系统下可执行程序调用dll动态库的方法。

dll 两种链接方式  : 动态链接和静态链接(链接亦称加载)

动态链接:指在生成可执行文件时不将所有程序用到的函数链接到一个文件,因为有许多函数在操作系统带的dll文件中,当程序运行时直接从操作系统中找。  动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在运行时再装入。
静态链接:就是把所有用到的函数全部链接到exe文件中。静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了。

(1)生成 : 
静态链接库 lib 和动态链接库 dll;
新建工程 (newdll)  win32项目 ->  dll;
添加*.h文件 ;
示例程序:
#ifndef BETABINLIB_H
#define BETABINLIB_H
 
#ifdef NEWDLL_EXPORTS   //自动添加的宏   右键工程-属性-配置属性-预处理器-..定义
#define MYDLL_API extern "C" __declspec(dllexport)
#else
#define MYDLL_API extern "C" __declspec(dllimport)
#endif
 
MYDLL_API int add(int x, int y);  // 必须加前缀

#endif

添加*.cpp文件;
示例程序:
#include "stdafx.h"
#include "betabinlib.h"
 
int add(int x, int y)
{
    return x + y;
}
编译生成  .dll 和 .lib文件。

(2)使用:
方法一:dll的静态加载--将整个dll文件 加载到 .exe文件中;
特点:程序较大,占用内存较大,但速度较快(免去调用函数LOADLIB等)
测试:
需要文件:  .lib  和 .dll两个文件 (.lib 做 引导用),.h文件
示例程序:
#include <stdio.h>
#include <Windows.h>
#include "betabinlib.h"
#pragma comment(lib, "newdll.lib")

 
int main()
{
    printf("2 + 3 = %d \n", add(2, 3));
    return 0;
}

方法二:dll的动态加载--根据需要加载响应函数,随时可卸载。不会因为找不到dll, 导致程序不能运行(需要自己做判断处理)。
只需要 .lib文件,不需要 .h文件。
#include <stdio.h>
#include <Windows.h>
 
int main()
{
    HINSTANCE h=LoadLibraryA("newdll.dll");
    typedef int (* FunPtr)(int a,int b);//定义函数指针

 
    if(h == NULL)
    {
    FreeLibrary(h);
    printf("load lib error\n");
    }
    else
    {
        FunPtr funPtr = (FunPtr)GetProcAddress(h,"add");
        if(funPtr != NULL)
        {
            int result = funPtr(3, 3);
            printf("3 + 3 = %d \n", result);

        }
        else
        {
            printf("get process error\n");
            printf("%d",GetLastError());
        }
        FreeLibrary(h);
    }
 
    return 0;
}




Windows下使用静态库和动态库

Windows下使用静态库和动态库
  • zhangxiao93
  • zhangxiao93
  • 2016年05月10日 23:26
  • 4519

Windows与Linux动态库的两种加载方式

Windows上的动态库(dll)加载方式有两种: 1.静态加载,运用#pargma comment(lib, "xxx.dll")方式,这种方式需要 头文件,lib文件和dll文件配合使用,运行时是...
  • Shado_walker
  • Shado_walker
  • 2016年11月25日 17:35
  • 1374

Windows静态库和动态库的创建和使用

偶们在实际的编程开发中,经常会遇到运行时无法找到某个DLL文件或者链接时无法找到某个LIB文件。然后,我们就开始乱GOOGLE一下,然后将VS2005的设置改变一下,或许就Ok了,我们将别人开发的DL...
  • wallaceli1981
  • wallaceli1981
  • 2010年07月16日 20:37
  • 28380

lib 和 dll 的区别与使用, 没有头文件改如何使用

1.生成lib文件   首先,我们先建立一个控制台工程(新建->工程->控制台程序),添加add.cpp以及add.h文件。 //sub.h #ifndef _SUB_H #defin...
  • u014114990
  • u014114990
  • 2016年03月29日 21:59
  • 2354

windows中LIB和DLL的区别与使用

共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。 一种是LIB...
  • B_H_L
  • B_H_L
  • 2012年07月24日 16:33
  • 5359

windows环境下lib和dll的区别和联系详细

c++中共有两种库: 1、LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。(这种方式...
  • ghevinn
  • ghevinn
  • 2015年02月12日 10:51
  • 14661

在自己的项目中调用别人的库的方法(static lib库,dynamic lib库以及dll动态库)

众所周知,出现.lib, .dll这种文件的原因是为了保护源代码,这个就不细说了。 用OpenCV的开源库来举个例子看一下就知道了: bin文件夹里面放的都是dll文件; lib文件夹里面放的...
  • woainishifu
  • woainishifu
  • 2016年12月07日 17:05
  • 2029

Windows动态链接库DLL的使用

windows程序设计使用动态链接库可以有效的分隔大型项目的模块,DLL里面主要提供函数的调用接口(函数名)供其他的外部引用程序调用,调用者在完全不知道动态链接库中的实现方式的情况下,仍然能根据其提供...
  • dangercheng
  • dangercheng
  • 2012年11月14日 10:34
  • 4721

浅谈Windows平台下C++调用静态链接库的方式

浅谈Windows平台下C++调用静态链接库的方式1. 什么是静态链接库?为什么要用静态链接库?维基百科上关于静态库的解释是这样的:在计算机科学里,静态库(英语:Static library, Sta...
  • u014359097
  • u014359097
  • 2017年02月05日 11:21
  • 2759

Linux下C调用静态库和动态库

Linux下C调用静态库和动态库本文主要介绍Linux下C调用静态库和动态库,使用的样例文件请点击这里. 样例文件welcome.c:#include #include"welcome.h"void...
  • u011192270
  • u011192270
  • 2016年11月23日 16:29
  • 1686
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows系统下可执行程序调用lib静态库和dll动态库的方法
举报原因:
原因补充:

(最多只允许输入30个字)