2.其中我们感兴趣的是OneDLL.cpp文件和OneDLL. def文件。
OneDLL.cpp文件是DLL的主要的源代码文件,它包含了COneDLLApp类的定义;OneDLL.def文件包含了DLL提供的关于DLL在Wind ows下运行的一些信息,在这个文件中定义了一些参数,如DLL的名称和属性等,还声明了从DLL中输出的函数。
3.添加实现代码,黑色加粗部分为添加的代码。
#include \"stdafx.h\"
#include \"OneDLL.h\"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
int Message(void);
BEGIN_MESSAGE_MAP(COneDLLApp, CWinApp)
END_MESSAGE_MAP()
// COneDLLApp 构造
COneDLLApp::COneDLLApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 COneDLLApp 对象
COneDLLApp theApp;
// COneDLLApp 初始化
BOOL COneDLLApp::InitInstance()
{
CWinApp::InitInstance();
return TRUE;
}
int Message(void)
{
MessageBox(NULL,_T(\"This is
return 1;
}
记得设为为多字节而非unicode编码。修改.def文件:
OneDLL.def : 声明 DLL 的模块参数。LIBRARY \"OneDLL\"
EXPORTS Message
; 此处可以是显式导出
the example of testing
DLL.\"),NULL,MB_OKCANCEL);
4.点击生成——生成解决方案,可以生成相关的lib文件和dll文件,在OneDLL\\Debug进行查看生成的文件。
5. 新建调用DLL(OneDLL)的MFC工程。
新建一个基于MFC框架的单文档工程,并在TestDLLView.cpp文件开始处添加
HINSTANCE handlerDLL=NULL;
typedef int(* MESSAGE)(void);
MESSAGE Message;
然后在菜单中添加DLL主菜单、子菜单,如下图所示,以及View类下的菜单响应函数。
子菜单ID分别为IDDLLLOAD和IDDLLTEST
void CTestDLLView::OnDllload()
{
// TODO: 在此添加命令处理程序代码
if(handlerDLL!=NULL)
{
MessageBox( _T(\"The OneDLL.DLL has been loaded.\") );
return;
}
handlerDLL=LoadLibrary( _T(\"OneDLL.DLL\") );
if(handlerDLL==NULL)
{
MessageBox( _T(\"Cannot Load the OneDLL.DLL\") );
}
else
{
MessageBox( _T(\"Load the OneDLL.DLL successful!\") );
}
Message=(MESSAGE)GetProcAddress(handlerDLL,_T(\"Message\"));
}
void CTestDLLView::OnDlltest()
{
// TODO: 在此添加命令处理程序代码
if(handlerDLL==NULL)
{
MessageBox(_T(\"Please Load the OneDLL.DLL first.\"));
return;
}
Message();
}
接着,进行生成——生成解决方案,提示如下错误:
通过查看是 Message=(MESSAGE)GetProcAddress(handlerDLL,_T(\"Message\"));引起的,解决办法是:右击视图栏中的工程名——属性——项目默认值——字符集——使用多字节字符集(原来是使用Unicode字符集)——确定,重新生成解决方案,错误消失。
6. 打开OneDLL工程,右击视图栏中的工程名——属性——配置属性——常规——输出目录设置为TestDLL\\Debug,然后点击生成——生成解决方案,就可以在TestDLL\\Debug路径下生成相关的lib文件和dll文件以供调用。
7.打开TestDLL工程,并允许该工程。
打击菜单DLL——LoadDLL,弹出下面的对话框,说明DLL载入成功,单击确定。
然后单击DLL——TestDLL,弹出下面的对话框,说明DLL调用成功。
如果提示Cannot Load the OneDLL.DLL,说明设置的调用DLL的路径有问题;
如果提示The OneDLL.DLL has been loaded.说明DLL已经载入了。
至此,整个实验已经结束,如果有兴趣,自己可以动手试试。
注意:
1. 在设置DLL的生成目录时,通过浏览按钮,你选择目的路径,系统会自动生成为相应的相对地址..\\..\\TestDLL\\Debug。
..\\..\\TestDLL\\Debug代表相对路径;
D:\\LiuYaqiang\\vs2012\\TestDLL\\Debug代表绝对路径;
相对路径在工程的目录发生移动的时候,可以省去很多麻烦,这点大家自己慢慢体会吧。
2. TestDLL\\Debug与TestDLL\\TestDLL\\Debug很相像,大家不要选错了,这个例子中应该选择前者。
参考资料:
Visual+C+++6.0_编程实例与技巧
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务