MFC三大dll使用总结

DLL指的是动态链接库(Dynamic Link Library),它是一个可以被多个应用程序(甚至是不同语言编写的应用程序)同时调用的可执行二进制文件,是一个可共享的库。DLL是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个DLL(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的DLL。显然,DLL是VC职业程序员的必修课,因为在开发商业化软件中,总是要将应用程序分成多个模块化DLL,以便于调试、链接和维护。

  在VC 6.0中的MFC可以支持三种形式的DLL,包括常规静态DLL、常规动态DLL以及扩展DLL。使用VC 6.0的AppWizard可以创建这三种形式的DLL:点击菜单项"File>New…",在弹出的"New"对话框中激活"Project"栏,在列表框选中"MFC AppWizard(dll)",并输入工程名称和路径信息

 

  单击"OK"按钮,弹出"MFC AppWizard-Step 1 of 1"对话框

 

  就会看到三个可选圆按钮:"Regular DLL with MFC statically linked"、"Regular DLL using shared MFC DLL"和"MFC Extension DLL(Using shared MFC DLL)"。它们依次对应着三类DLL。常规静态DLL与常规动态DLL的区别是:前者使用的是MFC的静态链接库,生成的DLL文件长度大,一般不使用这种方式,后者使用MFC的动态链接库,生成的DLL文件长度小;动态链接到MFC的常规DLL所有输出的函数应该以如下语句开始(用于正确切换MFC模块状态): 
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

  扩展DLL用来建立MFC的派生类,只被用MFC类库所编写的应用程序调用。常规DLL(包括静态与动态)的一个特点是在源文件里有一个继承CWinApp的类(从CWinApp派生,但没有消息循环),被导出的函数是C++类或者C++成员函数,调用常规DLL的应用程序不必一定是MFC应用程序。扩展DLL和常规DLL不一样,它没有一个从CWinApp继承而来的类的对象,编译器默认了一个DLL入口函数DLLMain()作为对DLL的初始化。

  以下是一个编制DLL的程序示例。为此,应先建立一个名为TestDll应用主程序,再创建一个DLL应用,作为主工程的子工程,并在主工程中调用DLL。通过MFC AppWizard创建一个对话框程序,在其中添加一个命令按钮(名称为"调用DLL程序")。点击按钮后就去调用DLL程序。以下介绍该DLL程序的编制。

 

  通过MFC AppWizard(dll)输入DLL程序的名称"DLL"后点击"Finish"按钮生成一个DLL程序的基本结构,我们可以选择第一项按钮"Regular DLL with MFC statically linked" 生成常规静态DLL,也可以选择第二项按钮"Regular DLL using shared MFC DLL"生成常规动态DLL,后者的体积远远小于前者。现在的任务是在运行DLL时弹出一个显示"This is My DLL"字样的对话框,点击"确定"后返回调用程序。为此,需要在DLL工程中插入一个对话框资源(该对话框类名为CMyDlg),在DLL.cpp程序开头输入以下代码:
#include "MyDlg.h"

  在DLL.cpp程序最后一行代码"CDLLApp theApp;"后面输入以下代码:
extern "C" _declspec(dllexport) int MyTest()
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 CMyDlg dlg;
 dlg.DoModal();
 return 0;
}

  对DLL编译后生成DLL.dll程序。

  然后,进入主程序TestDll,利用ClassWizard对命令按钮代码段添加下列代码:
void CTestDlg::OnButton1() 
{
 // TODO: Add your control notification handler code here
 typedef int(_cdecl *Connect)();
 HINSTANCE hinstDLL=NULL; 
 hinstDLL=LoadLibrary("DLL.dll");
 if (hinstDLL)
 {
  Connect Proc;
  Proc = (Connect)GetProcAddress(hinstDLL,"MyTest");
  int iTemp = Proc();
  FreeLibrary(hinstDLL);
 }
 else
 {
  AfxMessageBox("Not found dll !");
 }
}

  为了让TestDll能够调用DLL.dll程序,需要让前者能够"看见" DLL程序。一个Windows程序定位DLL的次序是, 1.包含EXE文件的目录,2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录,5.列在Path环境变量中的一系列目录。为此,需要将DLL.dll放到上述相关目录中,这样执行主程序TestDll,点击命令按钮就显示以下DLL运行结果。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MFC(Microsoft Foundation Class)是一种开发Windows桌面应用程序的框架,可以使用动态链接DLL)来实现中英文切换。 首先,我们需要创建一个DLL项目,并在其中添加资源文件,包括不同语言的字符串和对应的ID。比如,可以创建两个资源文件,一个是英文字符串,另一个是中文字符串,分别命名为en-US.res和zh-CN.res。 然后,在MFC应用程序使用LoadLibrary函数加载DLL,并调用FindResource和LoadResource函数加载对应语言的资源。可以通过设置不同的语言标识符参数来选择加载不同的资源。例如,对于英文资源,可以使用以下代码: HMODULE hModule = LoadLibrary(_T("dll路径")); HRSRC hResource = FindResource(hModule, MAKEINTRESOURCE(IDR_ENGLISH), RT_RCDATA); HGLOBAL hMemory = LoadResource(hModule, hResource); LPVOID lpResource = LockResource(hMemory); CString strEnglish((const char*)lpResource); FreeLibrary(hModule); 对于中文资源,只需将IDR_ENGLISH更改为IDR_CHINESE即可。 最后,使用CString或其他方法将获取的字符串显示在MFC应用程序的界面上,即可实现中英文切换。 需要注意的是,为了方便切换语言,在MFC应用程序中还需提供切换语言的选项或设置,通过相应的逻辑代码来实现切换时重新加载DLL并更新界面显示的字符串。 总结起来,借助MFC的特性和DLL的加载能力,我们可以在应用程序中通过加载不同的资源文件来实现中英文切换。 ### 回答2: 在MFC使用DLL实现中英文切换,可以通过以下步骤进行: 第一步,创建一个DLL项目,用于存储中英文的字符串资源。可以在资源文件中添加对应的中英文字符串,并在代码中定义一个函数来获取这些字符串。 第二步,创建一个MFC应用程序项目。在应用程序的初始化过程中,加载DLL文件并获取所需要的字符串资源。可以使用LoadLibrary函数加载DLL文件,并使用GetProcAddress函数获取相应函数的地址。 第三步,创建一个语言选择界面,用于让用户选择要使用的语言。可以使用对话框或者菜单添加语言选项。用户选择语言后,将相应的语言标识保存在配置文件或注册表中。 第四步,根据用户选择的语言标识,动态修改应用程序中的字符串显示。可以通过调用DLL中的函数来获取对应的中英文字符串,然后将其显示在对应的界面控件上。 第五步,在应用程序的所有界面中添加语言切换的功能。可以在每个界面的菜单栏或功能栏上添加一个语言切换的按钮或选项,用户点击按钮或选择选项后,重新加载相应语言的字符串资源,并刷新界面中的所有文本。 通过以上步骤,就可以实现MFC应用程序的中英文切换功能。用户可以根据自己的需要选择合适的语言,并在应用程序中动态更改界面文字的显示。这样可以提供更好的用户体验,同时方便应对不同语言环境下的需求。 ### 回答3: 在MFC中实现中英文切换可以通过使用动态链接DLL)的方式来实现。首先,我们可以在资源文件中创建多语言版本的字符串资源,分别对应中文和英文。然后,将这些字符串资源保存到一个DLL文件中。 在MFC应用程序中,我们需要在主窗口初始化时加载这个DLL文件,以便在运行时可以动态切换语言。可以在InitInstance函数中使用LoadLibrary函数加载DLL文件,并使用AfxSetResourceHandle函数将资源句柄设置为DLL文件的句柄。 当需要切换语言时,我们可以通过调用AfxSetResourceHandle函数来重新设置资源句柄为DLL文件的句柄,然后强制重绘界面。这样就可以实现界面上的文本、标签等显示为不同的语言了。 另外,为了方便管理和切换语言,可以根据需求在应用程序中添加一个菜单或者工具栏,通过点击菜单项或者工具栏按钮在运行时切换语言。当用户通过菜单或者工具栏切换语言时,可以根据用户选择的语言,重新设置资源句柄为相应DLL文件的句柄,并强制重绘界面。 需要注意的是,在切换语言的过程中,我们需要注意重新加载语言资源,例如重新加载菜单资源、工具栏资源等,以便将其显示为对应的语言。 总的来说,通过使用DLL实现中英文切换可以让我们的应用程序更加灵活多语言化,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值