关于静态库的使用
静态库不需要main函数,其他函数的定义也没有太大的区别,需要设置项目属性中的:
生产一个xxx.lib的文件
关于静态库的使用
新建一个项目,然后将xxx.lib文件拷贝过来,放在这个工程文件和main.c文件放在一起,
在main.c中需要应用这个xxx.lib
Eg:
//不需要 分号;库必须复制过去到这个工程文件和main.c同样目录下面
#pragma comment(lib,"进制.lib")
如果xxx.lib工程中.c文件对应的头文件.h,则最好在也把.h文件也引用:#include “xxx.h”
这样就可以,对于xxx.lib里面函数的引用和普通函数应用一样。直接调用函数名。
关于动态库的使用
1. 动态库也是不要main函数的,单数里面的函数的定义是需要这样定义:
Eg:
_declspec (dllexport) void msg()
{
MessageBoxA(0, "11", "222",0);
}
//函数头需要 _declspec (dllexport)
生产项目后(也要注意设置项目属性中的),
得到xx.dll文件,将xx.dll拷贝到需要用他的项目中,和main文件在一个文件夹中;
2. 在main项目中
typedef void(*pMsg)();//声明函数指针pmsg;将函数名换成 (*p);加上括号!
typedef int(*pAdd)(int a, int b);//定义和简化函数指针
void main()
{
HMODULE myDll = LoadLibraryA("动态库.dll");
if(myDll == NULL)
{
printf("加在DLL失败");
}
else
{
pMsg pmsg1;//定义一个函数指针
pmsg1= (pMsg)GetProcAddress(myDll, "msg");//获取函数地址
if(pmsg1 != NULL)
{
pmsg1();
}
}
pAddpadd1;
padd1= (pAdd)GetProcAddress(myDll, "add");
if(padd1 != NULL)
{
printf("\n%d",padd1(12, 3));
}
FreeLibrary(myDll);
system("pause");
}
首先先定义简化dll中的函数名,
然后将dll库加载到该文件中,前提是在文件夹里面已经放置了xx.dll文件,然后,添加:HMODULEmyDll = LoadLibraryA("动态库.dll");
然后获得需要用到dll中某个函数的地址,通过GetProcAddress这个函数;
pMsg pmsg1;//定义一个函数指针
pmsg1 =(pMsg)GetProcAddress(myDll, "msg");
最后在用完这个dll后,要释放他;则调用方法:
FreeLibrary(myDll);
关于动态库和静态库的区别
3. 动态库:
谁都可以用,不用跟新exe,更新dll,可以实现功能的更新,节约计算机资源,需要使用的时候,调用,否则释放,此外,很多做坏事的都是操作dll,可以实现劫持!在程序员的工作中,很多都是做dll。
4. 静态库:
a) 可以实现私有化,每次更新,需要重新编译exe,浪费资源。