首页 |缤纷校园 |心理援助 |英语世界 |公务员 |考研天地 |资格考试 |电脑认证 |免费论文 |实用文档 |求职就业 |论坛 |网络课堂 |留言板
 电脑认证首页     考试专题 考试提醒 计算机等级考试 计算机认证水平考试 IT认证 论坛
 最近更新
· [学习辅导]用Java的加密机制来保护你…
· [学习辅导]如何开发、调试和测试EJB3…
· [学习辅导]Java会因为RoR的流行而过时…
· [学习辅导]谈java的导入(import)
· [学习辅导]Java程序开发中代理技术的…
· [学习辅导]如何利用JAVA实现斐波那契…
· [学习辅导]Java:Web应用下实现定时任…
· [学习辅导]Java程序把Word文档直接换…
· [备考指南]Java开发技术十年回顾与展…
· [备考指南]EasyJWeb-0.8.0版本发布
 精品课程
· [医卫类精品课程]名师主讲口腔执业医师…
· [精品课程推荐]公务员考试权威专家网…
· [医卫类精品课程]中医执业医师考试网上…
· [医卫类精品课程]临床助理医师网络辅导…
· [工程类精品课程]公路监理工程师考试网…
· [医卫类精品课程]执业药师考试网上辅导…
· [医卫类精品课程]名师执业医师考试网上…
· [工程类精品课程]物业管理师考试名师团…
· [财经类精品课程]名师主讲会计从业资格…
· [工程类精品课程]城市规划师考试名师在…
 考试动态
· [二级考试动态]北京:07年下半年计算机等…
· [二级考试动态]2008年4月全国计算机等级考…
· [二级考试动态]2007年下半年计算机等级考…
· [二级考试动态]天津:2007年下半年全国计…
· [二级考试动态]计算机技术与软件专业技术…
· [二级考试动态]2007年计算机等级考试改期…
· [二级考试动态]河北07计算机考点出故障考…
· [二级考试动态]2007年贵州省计算机补考7月…
· [二级考试动态]了解考试系列:二级C语言的…
· [二级考试动态]了解考试系列:二级VC++语…
 试题下载
· [试题下载]07年计算机等级考试二级C+…
· [试题下载]07年计算机等级考试二级C+…
· [试题下载]JavaSocket编程(二)
· [试题下载]07年计算机等级考试二级C+…
· [试题下载]07年4月计算机等级考试二级…
· [试题下载]在局域网进行IP包捕获的一…
· [试题下载]动态链接库的创建和调用
· [试题下载]计算机等级考试二级C语言模…
 学习辅导
· [学习辅导]二级C语言考试辅导教程第二…
· [学习辅导]二级C辅导教程及考点分析:…
· [学习辅导]初学者编程入门:C语言指针…
· [学习辅导]二级C宏--智者的利刃,愚者…
· [学习辅导]二级C宏--智者的利刃,愚者…
· [学习辅导]等级考试二级C专家编程读书…
· [学习辅导]等级考试二级C专家编程读书…
· [学习辅导]全国等级考试二级详细解析…
 

动态链接库的创建和调用

文章录入:admin    责任编辑:admin   2007-7-20 10:50:17  来源:考试大  点击数:
 
 动态连接库的创建步骤:

    一、创建Non-MFC DLL动态链接库

    1、打开File —〉 New —〉 Project选项,选择Win32 Dynamic-Link Library —〉sample project —〉工程名:DllDemo

    2、新建一个.h文件DllDemo.h

    #ifdef DllDemo_EXPORTS

    #define DllAPI __declspec(dllexport)

    #else

    #define DllAPI __declspec(dllimport)

         extern “C“    //原样编译

    {

    DllAPI int __stdcall Max(int a,int b); //__stdcall使非C/C++语言内能够调用API

    }

    #endif

     3、在DllDemo.cpp文件中导入DllDemo.h文件,并实现Max(int,int)函数

     #include “DllDemo.h“

     DllAPI int __stdcall Max(int a,int b)

     {
         if(a==b)
              return NULL;
         else if(a〉b)
              return a;
         else
              return b;
     }

     4、编译程序生成动态连接库

    二、用.def文件创建动态连接库DllDemo.dll。

    1、删除DllDemo工程中的DllDemo.h文件。

    2、在DllDemo.cpp文件头,删除 #include DllDemo.h语句。

    3、向该工程中加入一个文本文件,命名为DllDemo.def并写入如下语句:

    LIBRARY MyDll
    EXPORTS
    Max@1

    4、编译程序生成动态连接库。

    动态链接的调用步骤:

    一、隐式调用

    1、 建立DllCnslTest工程

    2、 将文件DllDemo.dll、DllDemo.lib拷贝到DllCnslTest工程所在的目录

    3、 在DllCnslTest.h中添加如下语句:

    #define DllAPI __declspec(dllimport)

    #pragma comment(lib,“DllDemo.lib“)   //在编辑器link时,链接到DllDemo.lib文件

    extern “C“

    {

    DllAPI int __stdcall Max(int a,int b);

    }

    4、在DllCnslTest.cpp文件中添加如下语句:

    #include “DllCnslTest.h“//或者 #include “DllDemo.h“

    void main()
    {
        int value;
         value = Max(2,9);
         printf(“The Max value is %d\n“,value);
    }

    5、编译并生成应用程序DllCnslTest.exe

    二、显式调用

    1、建立DllWinTest工程

    2、将文件DllDemo.dll拷贝到DllWinTest工程所在的目录或Windows系统目录下。

    3、用vc/bin下的Dumpbin.exe的小程序,查看DLL文件(DllDemo.dll)中的函数结构。

    4、使用类型定义关键字typedef,定义指向和DLL中相同的函数原型指针。

    例:

    typedef int(*lpMax)(int a,int b); //此语句可以放在.h文件中

    5、通过LoadLibray()将DLL加载到当前的应用程序中并返回当前DLL文件的句柄。

    例:

    HINSTANCE hDll;    //声明一个Dll实例文件句柄

    hDll = LoadLibrary(“DllDemo.dll“);//导入DllDemo.dll动态连接库

    6、通过GetProcAddress()函数获取导入到应用程序中的函数指针。

    例:

    lpMax Max;
    Max = (lpMax)GetProcAddress(hDLL,“Max“);
    int value;
    value = Max(2,9);
    printf(“The Max value is %d“,value);

    7、函数调用完毕后,使用FreeLibrary()卸载DLL文件。

    FreeLibrary(hDll);

    8、编译并生成应用程序DllWinTest.exe

    注:显式链接应用程序编译时不需要使用相应的Lib文件。

  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    设为首页 - 加入收藏 - 联系站长 - 友情链接 - 版权申明
    Copyright©2003-2008 www.dastu.com, All Rights Reserved.

    心语心愿科技(北京)有限责任公司    版权所有

    鄂ICP备05000022号