环境: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"); }