CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

调用DLL

楼主moximoxi((~@~))2002-03-29 12:44:33 在 VC/MFC / 基础类 提问

怎么显式链接调用DLL. 问题点数:100、回复次数:4Top

1 楼moximoxi((~@~))回复于 2002-03-29 12:45:16 得分 0

在显式链接下,应用程序必须进行函数调用以在运行时显式加载     DLL。为显式链接到     DLL,应用程序必须:          
     
  调用     LoadLibrary(或相似的函数)以加载     DLL     和获取模块句柄。          
  调用     GetProcAddress,以获取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用     DLL     的函数,编译器不生成外部引用,故无需与导入库链接。          
  使用完     DLL     后调用     FreeLibrary。          
  例如:      
     
  typedef     UINT     (CALLBACK*     LPFNDLLFUNC1)(DWORD,UINT);      
  ...      
     
  HINSTANCE     hDLL;                                                             //     Handle     to     DLL      
  LPFNDLLFUNC1     lpfnDllFunc1;                 //     Function     pointer      
  DWORD     dwParam1;      
  UINT         uParam2,     uReturnVal;      
     
  hDLL     =     LoadLibrary(     "MyDLL     ");      
  if     (hDLL     !=     NULL)      
  {      
            lpfnDllFunc1     =     (LPFNDLLFUNC1)GetProcAddress(hDLL,      
                                                                                                                                                                                "DLLFunc1     ");      
            if     (!lpfnDllFunc1)      
            {      
                        //     handle     the     error      
                        FreeLibrary(hDLL);                                  
                        return     SOME_ERROR_CODE;      
            }      
            else      
            {      
                        //     call     the     function      
                        uReturnVal     =     lpfnDllFunc1(dwParam1,     uParam2);      
            }      
  }      
  Top

2 楼moximoxi((~@~))回复于 2002-03-29 12:45:28 得分 0

在显式链接下,应用程序必须进行函数调用以在运行时显式加载     DLL。为显式链接到     DLL,应用程序必须:          
     
  调用     LoadLibrary(或相似的函数)以加载     DLL     和获取模块句柄。          
  调用     GetProcAddress,以获取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用     DLL     的函数,编译器不生成外部引用,故无需与导入库链接。          
  使用完     DLL     后调用     FreeLibrary。          
  例如:      
     
  typedef     UINT     (CALLBACK*     LPFNDLLFUNC1)(DWORD,UINT);      
  ...      
     
  HINSTANCE     hDLL;                                                             //     Handle     to     DLL      
  LPFNDLLFUNC1     lpfnDllFunc1;                 //     Function     pointer      
  DWORD     dwParam1;      
  UINT         uParam2,     uReturnVal;      
     
  hDLL     =     LoadLibrary(     "MyDLL     ");      
  if     (hDLL     !=     NULL)      
  {      
            lpfnDllFunc1     =     (LPFNDLLFUNC1)GetProcAddress(hDLL,      
                                                                                                                                                                                "DLLFunc1     ");      
            if     (!lpfnDllFunc1)      
            {      
                        //     handle     the     error      
                        FreeLibrary(hDLL);                                  
                        return     SOME_ERROR_CODE;      
            }      
            else      
            {      
                        //     call     the     function      
                        uReturnVal     =     lpfnDllFunc1(dwParam1,     uParam2);      
            }      
  }      
  Top

3 楼otuotu(呕吐呕吐)回复于 2002-03-29 12:46:52 得分 100

在显式链接下,应用程序必须进行函数调用以在运行时显式加载     DLL。为显式链接到     DLL,应用程序必须:          
     
  调用     LoadLibrary(或相似的函数)以加载     DLL     和获取模块句柄。          
  调用     GetProcAddress,以获取指向应用程序要调用的每个导出函数的函数指针。由于应用程序是通过指针调用     DLL     的函数,编译器不生成外部引用,故无需与导入库链接。          
  使用完     DLL     后调用     FreeLibrary。          
  例如:      
     
  typedef     UINT     (CALLBACK*     LPFNDLLFUNC1)(DWORD,UINT);      
  ...      
     
  HINSTANCE     hDLL;                                                             //     Handle     to     DLL      
  LPFNDLLFUNC1     lpfnDllFunc1;                 //     Function     pointer      
  DWORD     dwParam1;      
  UINT         uParam2,     uReturnVal;      
     
  hDLL     =     LoadLibrary(     "MyDLL     ");      
  if     (hDLL     !=     NULL)      
  {      
            lpfnDllFunc1     =     (LPFNDLLFUNC1)GetProcAddress(hDLL,      
                                                                                                                                                                                "DLLFunc1     ");      
            if     (!lpfnDllFunc1)      
            {      
                        //     handle     the     error      
                        FreeLibrary(hDLL);                                  
                        return     SOME_ERROR_CODE;      
            }      
            else      
            {      
                        //     call     the     function      
                        uReturnVal     =     lpfnDllFunc1(dwParam1,     uParam2);      
            }      
  }      
  Top

4 楼NowCan(城市浪人)回复于 2002-03-29 12:48:36 得分 0

怎么都一样?Top

相关问题

  • DLL的调用
  • dll的调用?
  • DLL调用
  • 调用DLL
  • DLL调用
  • How 调用DLL ?
  • dll调用!
  • 调用dll
  • 调用DLL
  • dll调用

关键词

  • 函数
  • 应用程序
  • 指针
  • 编译器
  • 模块
  • dll
  • 相似
  • lpfndllfunc1
  • 调用
  • hdll

得分解答快速导航

  • 帖主:moximoxi
  • otuotu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo