即可生成动态链接库。
图 10…4 生成 Regular Dll using shared MFC DLL
·264 ·
…………………………………………………………Page 276……………………………………………………………
第 10 章 动态链接库
添加一个对话框资源到工程中,从菜单中依次选择“Insert ”→“Resource ”项,添加“Dialog ”
选择“New ”项,至此对话框已添加到 DLL 工程中。
为对话框添加 CTest 类,基类为 CDialog 。同时在 MFCDLL。cpp 中( 因创建的工程为
MFCDLL)添加测试接口函数如下:
extern 〃C〃 __declspec(dllexport) void Show()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest test;
test。DoModal ();
}
静态连接到 MFC 的动态链接库只被 Visual C++ 的专业版和企业版所支持。该类 DLL 应
用程序里头的输出函数可以被任意的 Win32 程序使用,包括使用 MFC 的应用程序。输入函
数有如下形式:
extern 〃C〃 EXPORT YourExportedFunction();
如果没有 extern 〃C〃修饰,输出函数仅仅能从 C++代码中调用。
DLL 应用程序从 CWinApp 派生,但没有消息循环。
动态链接到 MFC 的规则 DLL 应用程序里头的输出函数可以被任意 Win32 程序使用,包
括使用 MFC 的应用程序。但是,所有从 DLL 输出的函数应该以如下语句开始:
AFX_MANAGE_STATE(AfxGetStaticModuleState())
此语句用来正确地切换 MFC 模块状态。
因为一般在动态链接库中使用嵌入资源是通过动态链接的,所以测试接口函数作了上述
程序片断的声明和定义。
在要输出的函数、类、数据的声明前加上_declspec(dllexport) 的修饰符,表示输出。
_declspec(dllexport)在 C 调用约定、C 编译情况下可以去掉输出函数名的下划线前缀。extern
〃C〃使得在 C++ 中使用 C 编译方式成为可能。在“C++ ”下定义〃C〃函数,需要加 extern 〃C〃
关键词。用 extern 〃C〃来指明该函数使用 C 编译方式。输出的〃C〃函数可以从〃C〃代码里调用。
下面以具体示例作详细介绍。在一个 C++文件中,有如下函数:
extern 〃C〃 {void __declspec(dllexport) __cdecl Test(int var);}
其输出函数名为 Test 。
MFC 提供了一些宏,就有这样的作用。代码如下:
AFX_CLASS_IMPORT :__declspec(dllexport)
AFX_API_IMPORT :__declspec(dllexport)
AFX_DATA_IMPORT :__declspec(dllexport)
AFX_CLASS_EXPORT :__declspec(dllexport)
AFX_API_EXPORT :__declspec(dllexport)
AFX_DATA_EXPORT :__declspec(dllexport)
AFX_EXT_CLASS : #ifdef _AFXEXT
AFX_CLASS_EXPORT
#else
·265 ·
…………………………………………………………Page 277……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
AFX_CLASS_IMPORT
AFX_EXT_API :#ifdef _AFXEXT
AFX_API_EXPORT
#else
AFX_API_IMPORT
AFX_EXT_DATA :#ifdef _AFXEXT
AFX_DATA_EXPORT
#else
AFX_DATA_IMPORT
像 AFX_EXT_CLASS 这样的宏,如果用于 DLL 应用程序的实现,则表示输出(因为
_AFX_EXT 被定义,通常是在编译器的标识参数中指定该选项/D_AFX_EXT )。如果用于使
用 DLL 的应用程序中,则表示输入(_AFX_EXT 没有定义)。
要输出整个的类,对类使用_declspec(_dllexpot) ;要输出类的成员函数,则对该函数使用
_declspec(_dllexport) 。代码如下:
class AFX_EXT_CLASS CTextDoc : public CDocument
{
…
}
extern 〃C〃 AFX_EXT_API void WINAPI InitMYDLL();
为了调用动态链接库的资源,新建了一个基于对话框的 MFC 应用程序测试函数接口,
测试的主要代码如下:
void CTestDlg::OnOK()
{
// TODO: Add extra validation here
typedef void (WINAPI * TESTDLL)(); //定义函数指针类型 TESTDLL
HINSTANCE hmod; //动态链接库实例句柄
hmod = ::LoadLibrary (〃mfcdll。dll〃); //加载 mfcdll。dll 动态链接库
if(hmod==NULL)
{
AfxMessageBox(〃Fail〃); //如果加载动态链接库失败
}
TESTDLL lpproc; //定义接收导出函数的函数指针 lpproc
lpproc = (TESTDLL)GetProcAddress (hmod;〃Show〃); //得到导出函数 Show 的地址
if(lpproc!=(TESTDLL)NULL) // 当成功得到导出函数地址的时候
(*lpproc)(); //执行动态链接库中的导出函数
FreeLibrary(hmod); //释放动态链接库资源
·266 ·
…………………………………………………………Page 278……………………………………………………………
第 10 章 动态链接库
// CDialog::OnOK();
}
执行的结果如图 10…5 所示。从图中可以看出,可执行程序成功地调用了动态链接库中的
对话框资源。
图 10…5 调用 DLL 中的对话框资源
10。6 界面汉化示例
在 Windows 系统中,应用程序开发者可以通过利用动态链接库,用一套源代码来支持多
种文字。本节将通过一个界面汉化的示例来演示动态链接库中资源的应用方法。
利用 Visual C++编程,可以把所有的可见资源封装在一个资源动态链接库中,以简化本
地化工作。一般情况下,资源包含在应用程序中,但也可以通过调用 AfxSetResourceHandle
函数指向一个不同的单元以完成资源的引用。本例就是首先调用该函数从动态链接库中采集
到所有的应用程序可用资源,然后通过调用 GetSystemDefaultLangID 函数判断系统默认语种,
以载入不同语种的资源动态链接库实现界面与系统的自动适应。
实例 10…2:界面汉化
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 最新章:第28章