Visual Studio创建静态链接库(lib)与动态链接库(dll)

968 阅读1分钟

创建静态链接库

1.创建一个空项目

2.添加文件

lib.h

#pragma once
void SayHello();

lib.cpp

#include "lib.h"
#include <iostream>
void SayHello()
{
    std::cout << "Hello Lib!" << std::endl;
}

3. 配置项目属性

将“应用程序”修改为“静态库”。 image.png

4. 编译

编译生成解决方案后,可以看到工程目录下已生成.lib文件。 image.png

5. 测试

创建一个测试工程,并将生成的静态库文件MyLib.lib与头文件lib.h拷贝到工程目录下。 image.png 加载静态库并进行调用:
main.cpp

#include <iostream>
#include "lib.h"
#pragma comment(lib, "MyLib.lib")
int main()
{
    SayHello();
    return 0;
}

编译运行,可以看到输出

image.png

创建动态链接库

1.创建一个空项目

2.添加文件

dll.h

#pragma once
#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>

_declspec(dllexport) void SayHello();

dll.cpp

#include "dll.h"
#include <iostream>
void SayHello()
{
    std::cout << "Hello dll!" << std::endl;
}

dllmain.cpp

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "dll.h"

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

3. 配置项目属性

将“应用程序”修改为“动态库”。

image.png

4. 编译

编译生成解决方案后,可以看到工程目录下已生成.dll文件和.lib文件。

image.png

注意:静态链接库有两种,这里的静态库是配合动态库使用的那种。

5. 测试

创建一个测试工程,并将生成的MyDll.dllMyDll.libdll.h拷贝到工程目录下。

image.png 加载静态库并进行调用:
main.cpp

#include <iostream>
#include "dll.h"
#pragma comment(lib, "MyDll.lib")
int main()
{
    SayHello();
    return 0;
}

将dll.h修改为:
dll.h

#pragma once
#define WIN32_LEAN_AND_MEAN             // 从 Windows 头文件中排除极少使用的内容
// Windows 头文件
#include <windows.h>

_declspec(dllimport) void SayHello();

编译运行,可以看到输出

image.png

其他方法

以上展示的是从空白工程创建静态库与动态库的方法,实际上,VS提供了快速创建的模板,关于该方法的使用,可上网搜索到具体过程。

image.png