在vs2005中使用静态链接库和动态链接库

时间:2022-09-05 15:49:50

静态链接库:

首先,静态链接库的使用需要库的开发者提供生成库的.h头文件和.lib文件。生成库的.h头文件中的声明格式如下:
    extern "C" 函数返回类型 函数名(参数表);
    在调用程序的.cpp源代码文件中如下:
    #include "..\lib.h"
    #pragma comment(lib,"..\\debug\\libTest.lib") //指定与静态库一起链接(或者在IDE的lib栏中填入lib文件的路径,在IDE的lib目录栏填入lib所在文件夹目录)
其次因为静态链接库是将全部指令都包含入调用程序生成的EXE文件中。因此如果用的是静态链接库,那么也就不存在“导出某个函数提供给用户使用”的情况,要想用就得全要!要不就都别要!

个人理解:其实可以认为静态链接看做与直接将要链入的lib工程的源码引入编译等效,因为实际结果来看也应该是等效的,最终都只是一个exe文件,功能会是完全一样的,只是多了一些编译链接的过程.

 

动态链接库:

一、.动态库函数的调用,可以采用静态链接的方式 ,主要步骤如下:

1) 包含DLL中导出的头文件。

2) 采用#pragma comment(lib,"..\\debug\\libTest.lib")导入动态库生成的*.lib头文件。或在 projectàsettingsàLinkeràInput的Additional Dependencies中加入lib文件。

3) 将动态库生成的*.dll文件放到EXE或DLL的同一目录下。

二、 也可以采用动态加载的方式调用 ,步骤如下:

Another.dll有一个int Add(int x,int y) 函数。则完整的调用过程如下:

typedef int (* FunPtr)(int,int); //定义函数指针

FunPtr funPtr;

Handle handle =LoadLibrary("Another.dll");

funPtr =(FunPtr)GetProcAddress(handle ,"Add");

funPtr(2,3); // 2+3;

FreeLibrary(handle); // 释放载入的动态库

其它:

  项目->属性->配置属性->连接器->输入->附加依赖项里填写“winsock.lib”,多个 lib 以空格隔开,等同于“#pragma   

         comment(lib, "*.lib") ”语句。