windows使用静态库和动态库
1. 使用静态库
mylib.h中声明2个函数
#pragma once
int add(int a, int b);
int sub(int a, int b);
mylib.c函数实现
#include "mylib.h"
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
方式一,添加依赖项

引用静态库
#include <stdio.h>
#include <stdlib.h>
//静态库的头文件直接放入项目的根目录
#include "mylib.h"
//将mylib.lib文件放入项目的根目录下
//方式1. 链接器 输入 附加依赖项 添加 mylib.lib
//方式2. 指定引用静态库mylib,
//#pragma comment(lib,"mylib.lib")
int main(int argc, char *argv[])
{
int a = 10;
int b = 20;
int sum = add(a, b);
printf("sum=%d\n", sum);
sum = sub(20, 10);
printf("sum=%d\n", sum);
system("pause");
return 0;
}
2. 使用动态库
先简单学习函数指针
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int add(int a, int b)
{
return a + b;
}
int main(int argc, char *argv[])
{
typedef int func(int, int); //定义一个函数类型
func *pfunc; //定义一个函数类型的指针(函数指针)
pfunc = add;
int sum = pfunc(10, 20);
printf("%d\n", sum);
system("pause");
return 0;
}
动态库 代码
//_declspec (dllexport) 将函数进行导出
_declspec (dllexport) int add(int a, int b)
{
return a + b;
}
_declspec (dllexport) int sub(int a, int b)
{
return a - b;
}
调用动态库代码
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main(int argc, char *argv[])
{
int a = 20;
int b = 10;
//定义函数指针
typedef int(*Add)(int a, int b);
typedef int(*Sub)(int a, int b);
//通过LoadLibraryEx,动态加载dll文件
HMODULE hmodule = LoadLibraryEx("mydll.dll", NULL, DONT_RESOLVE_DLL_REFERENCES);
//获取add函数地址,用我们定义的函数指针接收add函数地址
Add add = (Add)GetProcAddress(hmodule, "add");
int sum = add(a, b);
printf("sum=%d\n", sum);
//获取sub函数地址, 用我们定义的函数指针接收sub函数地址
Sub sub = (Sub)GetProcAddress(hmodule, "sub");
int result = sub(a, b);
printf("result=%d\n", result);
//使用完之后,要进行释放
FreeLibrary(hmodule);
system("pause");
return 0;
}
生成之前,指定应用动态库的所在目录

秋风
2017-03-20