WPE|52wpe|我爱WPE

 找回密码
 注册会员
搜索
  • 1939查看
  • 0回复

主题

好友

1700

积分

禁止访问

发表于 2010-1-21 12:12:58 |显示全部楼层
怎么样写DLL(动态链接库)是个很老的话题了,老鸟觉得这东西很简单,不过一代一代新来的叉子们对此有会感到很陌生。这也是我为什么写这篇文章的原因。喜欢各位老鸟看了不要笑话,是老鸟就直接飘过。
步入今天的正题,这里我们只对动态库进行简单的介绍,DLL其实也是一种可执行文件(包括PE文件),只不过它不能够独立运行,需要一个载体,这里我们用的载体一般都是exe。
DLL编写的方法主要有两种:一种是MFC的,通常用于MFC工程。第二种是WIN32的动态库,这是很通用的,一般我们用的都是这种。为了简便起见我们就以WIN32的动态库为例
下面就请出我们的C++,选择开始建我们的第一个DLL,步骤如下
一、        依次打开:“文件”“新建”“工程”选择“WIIN32 DYNAMIC-LINK Library”,随便输入一个名称,然后我们再新建一个头文件
二、        现在我们就可以输入代码了,在头文件中输入:
extern "C" _declspec(dllexport) void Message();
这里有必要解释下这里主要是声名了一个DLL的输出函数
然后在我们的cpp源文件中,实现我们的函数:
void Message()
{
        ::MessageBox(NULL,"DLL加载成功!","DLL调用测试",1);
}
这里主要是为了看到效果我们就弄个弹出框了。
这样我们的第一个DLL就算建好了。前面说了DLL是需要载体才能够运行的,所以我们还得要为它写个exe的载体,步骤如下:
一、        首先我们先新建一个WIN32 Console Application
二、        为了方便,我们就在主函数中输入如下代码(代码中有注释):
        typedef void (*pMessage)();  
        HMODULE hDLL;
        pMessage Message;
        //char Path[]="F:\\c++\\DLLMAIN\\Debug\\DLLMAIN.dll";
        char Path[]="dll_messagebox.dll";
        hDLL=LoadLibrary((const char *)Path);//加载动态链接库MyDll.dll文件;
        cout<<hDLL<<endl;
        Message=(pMessage)::GetProcAddress(hDLL,"Message"); //得到动态库中函数的地址
        if(Message)
        {
                Message();
        }
        FreeLibrary(hDLL);//卸载MyDll.dll文件;
        return 0;
这样我们就可以测试我们的成果了。很简单,只是让我们认识DLL而已!要深入就得靠自己!

快速发帖

您需要登录后才可以回帖 登录 | 注册会员

手机版|Archiver|WPE|52wpe|我爱WPE ( 闽ICP备15009081号 )

GMT+8, 2024-5-3 01:17 , Processed in 0.054717 second(s), 16 queries .

返回顶部