admin 发表于 2025-11-4 21:27:45

C++ MFC 之动态链接库dll 窗口教程

C++ MFC 之动态链接库dll 窗口教程
对于一般的 dll 文件,我们可以在其他的 exe 文件中进行导入,并使用从该 dll 文件中导出的函数,同样的,MFC 程序也可以编译成动态链接库的形式。当然我们今天讨论的主题是编写一个图形化界面的 MFC dll,通过注入工具将该 dll 注入到其他程序,然后打开我们编写的图形化界面。一、编写 MFC 动态链接库首先我们需要新建一个 MFC 动态链接库 项目,并指定如下类型:
注:通过指定静态链接属性,当我们的 dll 程序可以运行在没有 mfc140.dll 的系统上。1 新建一个窗口并与类文件绑定此时,我们需要新建一个窗口,该窗口就是用于接收我们各种操作的窗口,右键资源文件 -> 添加 -> 资源,选择 Dialog 新建:
此时就生成了窗口,我们也可以对窗口进行各种属性的设置,如窗口标题、大小等。然后我们需要右键该新建窗口 -> 添加类,将其与类文件绑定,指定基类为 CDialog:
CDialogEx 基类比 CDialog 基类的功能更加丰富,适用于 XP 以后的系统,而 CDialog 基类更加简单,兼容性更强,后面演示代码基于 CDialog 基类。然后在主文件中添加刚刚新建的类头文件:
2 在 MFC 初始化函数中开启模态对话框线程通过上面的操作新建好对话框后,我们接下来需要在 MFC 动态链接库初始化的时候开启一个线程,该线程用于启动我们刚刚创建的模态对话框,下面是 MFC 动态链接库的初始化函数:
// CMFCLibrary1App 初始化BOOL CMFCLibrary1App::InitInstance(){        CWinApp::InitInstance();        return TRUE;}注:当 DLL 被加载后会触发该函数做一些初始化工作,如窗口的创建、显示等(对应的卸载函数为 ExitInstance())。接下来我们编写线程函数,并开启一个线程执行该函数:
// 注入 dll 后用于打开窗口的线程回调函数CMainDialog* pCMainDialog = NULL;DWORD WINAPI ThreadFunction(LPARAM lparam){        pCMainDialog = new CMainDialog();        pCMainDialog->DoModal();    // 创建模态对话框然后堵塞,等待窗口关闭后才会继续往下执行        FreeLibraryAndExitThread(theApp.m_hInstance, 1);    // 释放,会触发 ExitInstance() 函数        return 0;}// CMFCLibrary1App 初始化BOOL CMFCLibrary1App::InitInstance(){        CWinApp::InitInstance();        if (!::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction, NULL, 0, NULL))        {                MessageBoxA(NULL, "CreateThread() error", NULL, 0);        }        return TRUE;}二、注入 MFC dll选择一个任意的注入软件,并选择一个任意的进程注入,效果如下:三、调试 MFC dll如果是需要调试 exe 文件,直接可以在 VS 编译器里面点击调试器运行即可,但是 dll 文件如何调试呢?以调试刚刚编写的 dll 为例,我们首先打开待注入的进程,这里是 notepad.exe,然后点击 VS 的调试 -> 附加到进程,然后找到我们待注入的进程进行附加:
        auto dlg = new CMainDialog;
        //取的dlg的指针,做消息循环使用
        m_pMainWnd = dlg;
        dlg->DoModal();


书情画意 发表于 2025-11-5 05:10:40

帮你顶下哈

金钰铭鑫 发表于 2025-11-13 01:09:04

C++ MFC 之动态链接库dll 窗口教程

在 MFC DLL 项目中,我们首先需要创建一个窗口类,并将其与一个 C++ 类文件绑定。这可以通过 Visual Studio 的添加类向导来完成。选择“MFC 类”并指定基类为 CDialogEx(或其他合适的 MFC 窗口类)。<br><br>2 设计界面<br>使用资源编辑器设计你的对话框界面。你可以拖放控件如按钮、文本框等到对话框上,并通过属性窗口设置它们的属性。<br><br>3 实现功能<br>在你的 C++ 类文件中,实现消息处理函数来响应用户的操作,比如按钮点击事件。你可以通过 ClassWizard 添加消息处理函数。<br><br>4 编译 DLL<br>完成所有设计和编码后,编译项目生成 DLL 文件。确保在项目设置中选择了正确的运行时库和字符集。<br><br>5 测试 DLL<br>为了测试 DLL,你可以创建一个简单的 MFC 应用程序,通过调用 LoadLibrary 和 GetProcAddress 动态加载你的 DLL,并调用导出的函数来显示窗口。<br><br>[本文内容由人工智能科大讯飞 - 星火认知辅助生成,仅供参考]

通宇老海 发表于 2025-11-24 07:53:49

C++ MFC 之动态链接库dll 窗口教程

在 MFC DLL 项目中,我们首先需要创建一个窗口类,并将其与一个 C++ 类文件绑定。这可以通过 Visual Studio 的添加类向导来完成。选择“MFC 类”并指定基类为 CDialogEx(或其他合适的 MFC 窗口类)。这将自动生成相应的头文件和实现文件。<br><br>2 设计窗口界面<br>使用资源编辑器设计窗口界面。可以拖放控件如按钮、文本框等到对话框模板上,并通过属性窗口设置控件的属性。<br><br>3 处理消息映射<br>在对应的类文件中,使用 MFC 的消息映射宏来处理窗口消息。例如,要处理按钮点击事件,可以在类中添加一个成员函数,并在消息映射中将该函数与按钮的点击事件关联起来。<br><br>4 编译 DLL 项目<br>完成上述步骤后,编译项目以生成 DLL 文件。确保在项目设置中选择了正确的运行时库选项,以便 DLL 可以在没有 MFC DLL 的系统上运行。<br><br>5 测试和使用 DLL<br>最后,通过注入工具将 DLL 注入到目标应用程序中,并调用导出的函数以显示图形化界面。确保在开发过程中进行充分的测试,以验证功能的正确性和稳定性。<br><br>[本文内容由人工智能科大讯飞 - 星火认知辅助生成,仅供参考]
页: [1]
查看完整版本: C++ MFC 之动态链接库dll 窗口教程