注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

风雨启示录

欢迎光临我的网店优优我心:http://uumyheart.taobao.com

 
 
 

日志

 
 

VC++:动态链接库的静态调用和动态调用的区别及实例  

2010-08-23 20:44:10|  分类: C语言学习笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
假设已经建立test.dll文件,里面封装的函数是int add(int,int)
一、静态调用
#pragma comment(lib, "dlltest.lib")
extern "C"  _declspec(dllexport) int add(int i1,int i2);
*****
int i = add(10,20);
TCHAR str[256];
itoa(i, str, 10);
MessageBox(hwnd,str,TEXT("问好"),MB_OK);
预声明后,代码内直接调用.
二、动态调用
typedef int(__cdecl* FunctionAdd)(int,int);   //函数指针
。。。。。
HMODULE hModule;   
   FunctionAdd add;
   //LoadLibrary返回的是dll文件的句柄
   hModule = LoadLibrary("dlltest.dll");
   if(NULL== hModule   )
   {
    MessageBox(hwnd, TEXT("没有dll文件"), TEXT(""), MB_OK);
    return;
   }
   add =(FunctionAdd)GetProcAddress(hModule,"add");   
   if(NULL==add)
   {
    MessageBox(hwnd, TEXT("dll文件中没有函数"), TEXT(""), MB_OK);
    break;
   }
   int r = add(1,1);
   TCHAR str[256];
   itoa(r, str, 10);
   MessageBox(hwnd, str, TEXT(""), MB_OK);
   FreeLibrary(hModule); 
要用到C语言中函数指针的知识
二者的区别:
1、静态调用时,如果exe所在的文件夹没有dll文件及其lib文件,则运行exe会报错。及exe根本就运行不起来 ,系统提示没有找到dll文件等信息。错误信息是不可控的。
2、动态调用只有再调用dll文件时,如果没有,才会报错,并且此错误时可控的。
  评论这张
 
阅读(2090)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017