欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

动态库静态库的生成及显式隐式调用

程序员文章站 2022-05-22 12:45:54
...

动态库

首先新建一个dll动态库
动态库静态库的生成及显式隐式调用

然后建立一个.h头文件,加入函数


 #ifdef 函数名_EXPORTS  
 #define 函数名_API __declspec(dllexport)  
 #else  
 #define 函数名_API __declspec(dllimport)  
 #endif    

隐式调用

·项目->属性->配置属性->VC++ 目录-> 在“包含目录”里添加头文件project2.h所在的目录
动态库静态库的生成及显式隐式调用

·项目->属性->配置属性->VC++ 目录-> 在“库目录”里添加头文件project2.lib所在的目录
动态库静态库的生成及显式隐式调用

·项目->属性->配置属性->链接器->输入-> 在“附加依赖项”里添加“project2.lib”(若有多个 lib 则以逗号隔开)
动态库静态库的生成及显式隐式调用

·隐式调用源文件必须加上’#define TESTDLL_EXPORTS//不进行宏定义,或提示链接不一致,导致隐式调用失败’
##显式调用
直接上函数


dllfun lucky;      //先是定一个函数指针 dllfun;然后通过GetProcAdress来获取函数的地址  
HINSTANCE hDLL;               //定一个句柄实例,用来取DLL的实例地址  
hDLL = LoadLibrary("C:\\Users\\Pomelo\\Desktop\\caculater\\caculator\\Debug\\multiply.dll");//加载动态链接库MyDll.dll文件;     
if (hDLL == NULL)                             //取的地址要判断,返回的句柄是否为空,  
{                       //如果为无效句柄,那么要释放加载DLL所占用的内存  
	printf("无法载入dll\n");  
	FreeLibrary(hDLL);  
	return 0;  
}  
lucky = (dllfun)GetProcAddress(hDLL, "aaa@qq.com@aaa@qq.com"); //参数是DLL的句柄和你要调用的函数名  
if (lucky == NULL)  //这里也要判断要函数指针是否为空,如果没取到要求的函数,那么要释放句柄  
{  
	printf("无法获取函数地址\n");  
	FreeLibrary(hDLL);  
	return 0;  
}  
c1 = lucky(a, b);                              //调用compute函数,指向函数运算结果  
cout << a << "*" << b << "的值为:" << c1 << endl;         //输出最后计算结果  
FreeLibrary(hDLL);  

静态库

静态库建立方法和动态库一样,选择静态库。
静态库的调用只需要在属性中vc/c++添加包含目录(.h文件路径)和库目录(.lib)文件路径,连接器常规加入依赖项.lib文件名。
动态库静态库的生成及显式隐式调用