当前位置: 代码迷 >> 综合 >> 动态链接库学习续
  详细解决方案

动态链接库学习续

热度:85   发布时间:2024-01-22 02:28:14.0

     动态链接库,这个东西以前也学过好几次了.从学DELPHI开始,就在学这个.当时因为书本上也写得不清不楚,结果做出来的动态链接库也不清楚.这次也忘了是第几次巩固这个知识了.因为以前学了之后就没有再用了,而这次应该会用得多一点,希望"刻骨铭心"

     动态链接库的调用分为静态调用和动态调用.结合代码讲解如下.

这是静态调用时的程序模式.

#include <stdio.h>
#include <windows.h>
//#include "../newDll.h"
#pragma comment(lib,"..//debug//newDll.lib")//若是动态调用则不用添加这一句,只需要将DLL文件复制到工作区.
//#include "..//lib.def"//这句纯熟多余,因为采用模块定义的时候,由于我原先不理解其原理,而增加的.
extern _declspec(dllimport)int add(int,int);//若是动态调用,这一句也不用.因为动态调用直接查找函数地址.
void main()
{
 int result=add(2,3);
 printf("%d/n",result);
}  

 

#include <stdio.h>
#include <windows.h>
//#include "../newDll.h"
//#pragma comment(lib,"..//debug//newDll.lib")
//#include "..//lib.def"
//extern _declspec(dllimport)int add(int,int);
void main()
{
 HINSTANCE hInst = LoadLibrary("newDll.dll");
 typedef int (*pAddFun)(int,int);//记住,此处的*pAddFun不是一个函数,这里声明的是一个指针,函数指针
 pAddFun add = (pAddFun)GetProcAddress(hInst,"add");//此处"add"和add要说关系也没什么关系,不要忘记在后一个add上添加引号.
 int result=add(2,3);
 printf("%d/n",result);
 FreeLibrary(hInst);
}

下面是动态链接库代码

//newDll.cpp文件

int add(int a,int b)
{
 return a + b;
}

//lib.def文件

LIBRARY NewDll
EXPORTS
add @1

这里采用的是模块化定义输出函数,其他输出方法这里就不再讲了.我想我会记住的,因为我已经理解得差不多了.这里的关键在于记住两个文件.dll和.lib,最终在动态链接库中起作用的就是这两个文件

下一步导出类还要在看看,虽然这都差不多.

下面是一个动态调用的程序
  相关解决方案