在dll中实现一个完整的功能窗口

7453 人浏览 | 时间: 2016-06-23 20:04:19 | 作者: codexia 会员文章,禁止转载
    写这篇文章,又让我想起了刚毕业哪会,经理叫我写一个MFC的CView继承类,这个类完成完整的数据库管理功能,整个数据库管理功能就在dll中,dll提供给他的框架程序调用并启动数据库管理功能的执行。而且dll里的功能完全由dll控制,外部程序不干扰控制,最多就是加载dll和卸载dll这两个控制。
    然而那时我非常的菜鸟,不知道这个功能,经理明知道我是新人一个,也懒得说明一下,只是心里觉得我当时不行,不能干事情。他不说,我也不敢多问,他脾气太暴躁了,而且本来就对我就成见,所以我最后就做成了一个EXE形式的程序。最后他埋怨说,dll那个很简单呀,我很快就做好了。一直都不愿意跟我多说一句话,这个实现方法在我心里一直都是一个心结。或者说是技术阴影吧。
    在我技术提高到一定地步之后,这个技术对我来说,显然不是什么问题了。不过,一直没有总结过一篇文章。而这个实现方法,对于很多的新手来说,也一样是不知所措的,所以在此就分享出来,给新手们参考。希望你们能够快点成长,少一点打击。
    在文章《教你创建一个dll项目,非MFCdll项目》中,我已经详细的介绍了在VS中如何创建一个dll项目,而且是图文并茂的,相信你一看就懂了。不过还是需要自己创建一下。否则终究只是停留于理论而已。
    那么这里就介绍一下如何在dll中创造一个世界。当然,为了简单起见,我只是简单创建一个窗口而已。整个过程清楚了,我相信勤劳的你,可以尽可能发挥的。dll技术太常用了,不会dll开发的话,那都不好意思说自己是Windows程序员。
    我们在创建好的项目中,一个是dll的入口函数,如同main、WinMain函数一样的,代码如下:
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include <Windows.h>
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH://进程第一次加载dll
        break;
    case DLL_THREAD_ATTACH://线程创建的时候做初始化工作
        break;
    case DLL_THREAD_DETACH://线程结束的时候做清理工作
        break;
    case DLL_PROCESS_DETACH://进程卸载dll
        break;
    }
    return TRUE;
}

    这段代码也是VS帮我们自动创建好的,你不需要记忆,只要理解就行了。我们简单的使用dll,则不需要在这里写代码,所以简单说一下就行了。要深入的了解,看MSDN,有很详细的解释。
    DllMain就是一个入口函数,dll加载和卸载的时候,我们经常需要对dll做一些初始化或者清理工作。我们就可以在这里执行一些代码。我们的dll都是加载到进程空间的,dll本身就是一段代码或者数据或者代码和数据,dll本身是没有办法运行的,所以要让dll里的代码运行起来,就要借助进程的线程来执行。第一步就是要进入进程空间,而这个由系统完成。
    从DllMain可以看出,不同时机执行DllMain会做不同的工作。初始化工作都做好后,进程就可以顺利的执行dll里的代码了。我们写代码时调用的各种系统函数,都是调用的dll里的函数。这个对于写过代码的人来说,太常见了。然而我们现在要做的就是在dll中写代码,让其他项目代码来调用。自然,我们在dll中,也可以调用其他dll里的代码,比如Windows函数。
    入口函数也就这么回事,简单说了一下,就是让你熟悉一下这个东西,了解一下dll入口函数的存在。这里说的东西并不多。也不是本文
开通会员付1C币>>阅读全文
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
收藏 0 点赞 0
  • Andyy 2019-09-20 21:23:43

    rd xMzf#
    0回复

相关阅读