文章目录
- 静态库
- 动态库
- dll模块入口函数
静态库
选择桌面向导里面的静态库
设置为发布版,设置重新生成
创建文件夹放入库和头文件
将库放入工程目录下面
在属性中选择C/C++附加包含目录,选择include
属性中链接器选择附加目录将lib选中
#include <stdio.h>
#include <Testlib.h>
#pragma comment(lib,"Testlib.lib")//obj,lib 组合打包形成exe
int main()
{
int a = 10, b = 99;
printf("a+b=%d", add(a, b));
return 0;
}
不写#pragma comment(lib,“Testlib.lib”)可在属性链接器输入中的附加依赖项写入
改写为相对路径
动态库
放入到文件夹中
#include <stdio.h>
#include <Testdll.h>
#pragma comment(lib,"Testdll.lib") //隐式调用
int main()
{
int a = 10, b = 10;
printf("a+b=%d\n", add(a , b));
return 0;
}
显示调用
extern "C" __declspec(dllexport) int add(int a, int b);
#include <stdio.h> #include <Testdll.h> #include <Windows.h> //#pragma comment(lib,"Testdll.lib") //隐式调用 //定义一个函数指针类型 typedef int(*PADD)(int, int); int main() { //显示调用 HMODULE hTestdll=LoadLibrary(L"Testdll.dll");//当前exe文件下>面 if (hTestdll == NULL) { printf("加载失败"); return 0; } PADD add=(PADD)GetProcAddress(hTestdll, "add"); int a = 10, b = 10; printf("a+b=%d\n", add(a , b)); //卸载模块 FreeLibrary(hTestdll); return 0; }
或者添加模块定义文件可以去掉extern “C”
dll模块入口函数
#include "Testdll.h"
#include <Windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox(NULL, L"进程加载", L"提示", MB_OK);
break;
case DLL_THREAD_ATTACH:
MessageBox(NULL, L"线程加载", L"提示", MB_OK);
break;
case DLL_PROCESS_DETACH:
MessageBox(NULL, L"进程卸载", L"提示", MB_OK);
break;
case DLL_THREAD_DETACH:
MessageBox(NULL, L"线程卸载", L"提示", MB_OK);
break;
}
}
int add(int a, int b)
{
return a+b;
}