|
发表于 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而已!要深入就得靠自己! |
|