• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
lizhengjin
博客园    首页    新随笔    联系   管理    订阅  订阅
加载动态库的方法

库分两种,静态库和动态库,而动态库的加载方法又分两种,动态加载和静态加载

做为外部库,这两种库的加载都不需要包含头文件,因为相关的信息已经在导入库了

假设导入函数如下:add(int x, int y);

 

头文件如下:

extern "C" int __declspec(dllexport)add(int x, int y);

extern "C"代表c风格的,同时如果用不同的语言,则必需用相同的导入或者导出

源文件如下:

 

#include "test.h"

int add(int x, int y)
{
   return x + y;
}

 

动态加载使用如下:

typedef int(*lpAddFun)(int, int);

 HINSTANCE hDll; //DLL句柄

 pAddFun addFun; //函数指针

hDll = LoadLibrary(TEXT("D:\\work\\dll\\dll\\Debug\\test.dll"));


addFun = (lpAddFun)GetProcAddress(hDll, "add");

 

int result = addFun(2, 3);//得到函数指针后使用

先用windows函数LoadLibrary()得到dll的句柄,然后再根据句柄得到函数指针

如果是动态加载,则在运行的时候才能加载上

 

静态加载使用方式如下:

 

#pragma comment(lib,"D:\\work\\dll\\dll\\Debug\\test.lib");

//.lib文件中仅仅是关于其对应DLL文件中函数的重定位信息

extern "C"  int __declspec(dllimport)add(int x,int y);

int result = add(3, 6);

 

由此可见,动态加载使用比较方便,同时在运行的时刻加载,得到函数指针后直接使用.

而静态加载程序一开始运行就加载,使用的时候如同程序内的函数一样,不需要LoadLibrary()即可

 

 

posted on 2009-05-30 23:19  lizhengjin  阅读(879)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3