.dll与.lib的关系总结

环境:Win10 Vs2015 Debug+x64 新建一个C++的空项目 项目属性里首先配置好目标类型(.dll),再配置输出.lib和.dll的文件夹

 .dll文件需要有一个函数入口,DllMain(),只需要build即可得到需要.lib和.dll文件

//Function.h
#pragma once
extern "C" _declspec(dllexport) void test();
//Function.cpp
#include"Function.h"
#include <iostream>
using namespace std;
void test() {
  cout << "Hello World" << endl;
}
//TestDll.cpp
#include<Windows.h>
using namespace std;
BOOL APIENTRY DllMain(HANDLE hModulce, DWORD ul_reason_for_call, LPVOID lpReaserved) {
  return TRUE;
}

.lib有两种类型,一种是静态链接库(Static Link Library),它里面是函数实现的代码,是编译完很多个.obj的集合,使用时直接链接到主程序一起写进.exe(.dll)中,还有一种是动态链接库(Dynamic Link Library)的导入库(Import Library),里面没有实现的代码,只有输出方法的名字和其对应的地址,它和.dll配合使用(ps.即便是同一份代码,在不同编译器下可能有不同的地址)

寻找.lib的两种方式,首先Vs在项目属性VC++目录里找到库文件目录以及链接器目录里外部依赖项,然后就是以代码的形式直接给出路径

.dll即动态链接库(Dynamic Link Library),是应用程序的拓展,和.exe配合使用,它是在运行时调用里面的方法才被加载进内存的,build生成.exe后(ps.不管找不找得到.dll,都可以生成成功),既能在系统变量里添加.dll的文件夹才能通过lib的名字找到它,也可以是在.exe同一级目录下来找它

//test code
#include<iostream>
#include"D:\Vsproject\TestDLL\TestDLL\Function.h"
#pragma comment(lib,"D:\\Vsproject\\TestDLL\\output\\lib\\TestDLL.lib")
using namespace std;
using namespace std;
int main() {
  test();
  system("pause");
}

猜你喜欢

转载自www.cnblogs.com/night-raid/p/11538258.html