鱼C论坛

 找回密码
 立即注册
查看: 280|回复: 6

[已解决]MFC规则dll

[复制链接]
发表于 2023-5-25 14:22:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. // MFCdll.cpp: 定义 DLL 的初始化例程。
  2. //

  3. #include "pch.h"
  4. #include "framework.h"
  5. #include "MFCdll.h"

  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #endif

  9. //
  10. //TODO:  如果此 DLL 相对于 MFC DLL 是动态链接的,
  11. //                则从此 DLL 导出的任何调入
  12. //                MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到
  13. //                该函数的最前面。
  14. //
  15. //                例如:
  16. //
  17. //                extern "C" BOOL PASCAL EXPORT ExportedFunction()
  18. //                {
  19. //                        AFX_MANAGE_STATE(AfxGetStaticModuleState());
  20. //                        // 此处为普通函数体
  21. //                }
  22. //
  23. //                此宏先于任何 MFC 调用
  24. //                出现在每个函数中十分重要。  这意味着
  25. //                它必须作为以下项中的第一个语句:
  26. //                出现,甚至先于所有对象变量声明,
  27. //                这是因为它们的构造函数可能生成 MFC
  28. //                DLL 调用。
  29. //
  30. //                有关其他详细信息,
  31. //                请参阅 MFC 技术说明 33 和 58。
  32. //

  33. // CMFCdllApp

  34. BEGIN_MESSAGE_MAP(CMFCdllApp, CWinApp)
  35. END_MESSAGE_MAP()


  36. // CMFCdllApp 构造

  37. CMFCdllApp::CMFCdllApp()
  38. {
  39.         // TODO:  在此处添加构造代码,
  40.         // 将所有重要的初始化放置在 InitInstance 中
  41. }


  42. // 唯一的 CMFCdllApp 对象

  43. CMFCdllApp theApp;


  44. // CMFCdllApp 初始化

  45. BOOL CMFCdllApp::InitInstance()
  46. {
  47.        
  48.         CWinApp::InitInstance();
  49.        
  50.         return TRUE;
  51. }




  52. void ShowDLLDlg() {
  53.        
  54.         CDialog dlg(IDD_DIALOG1);
  55.         dlg.DoModal();


  56. }







复制代码






我的问题:如何让dll装载成功后,自动运行ShowDLLDlg()函数   ??
最佳答案
2023-5-25 14:23:33
在MFCdll.cpp文件中,可以添加一个导出函数,该函数在DLL加载时自动调用并运行ShowDLLDlg()函数。具体步骤如下:

1. 在MFCdll.h文件中添加以下代码:
  1. #ifdef MFCDLL_EXPORTS
  2. #define MFCDLL_API __declspec(dllexport)
  3. #else
  4. #define MFCDLL_API __declspec(dllimport)
  5. #endif
  6. MFCDLL_API void AutoRunShowDLLDlg();
复制代码

2. 在MFCdll.cpp文件中添加以下代码:
  1. MFCDLL_API void AutoRunShowDLLDlg()
  2. {
  3.     AFX_MANAGE_STATE(AfxGetStaticModuleState());
  4.     ShowDLLDlg();
  5. }
复制代码

3. 在DLL的导出函数中调用AutoRunShowDLLDlg()函数,如下所示:
  1. extern "C" MFCDLL_API void WINAPI RunDLL()
  2. {
  3.     AutoRunShowDLLDlg();
  4. }
复制代码

4. 然后在DLL的工程属性中,将MFCDLL_EXPORTS宏定义添加到预处理器定义中。

这样,在DLL加载时,就会自动调用AutoRunShowDLLDlg()函数,从而运行ShowDLLDlg()函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-25 14:23:33 | 显示全部楼层    本楼为最佳答案   
在MFCdll.cpp文件中,可以添加一个导出函数,该函数在DLL加载时自动调用并运行ShowDLLDlg()函数。具体步骤如下:

1. 在MFCdll.h文件中添加以下代码:
  1. #ifdef MFCDLL_EXPORTS
  2. #define MFCDLL_API __declspec(dllexport)
  3. #else
  4. #define MFCDLL_API __declspec(dllimport)
  5. #endif
  6. MFCDLL_API void AutoRunShowDLLDlg();
复制代码

2. 在MFCdll.cpp文件中添加以下代码:
  1. MFCDLL_API void AutoRunShowDLLDlg()
  2. {
  3.     AFX_MANAGE_STATE(AfxGetStaticModuleState());
  4.     ShowDLLDlg();
  5. }
复制代码

3. 在DLL的导出函数中调用AutoRunShowDLLDlg()函数,如下所示:
  1. extern "C" MFCDLL_API void WINAPI RunDLL()
  2. {
  3.     AutoRunShowDLLDlg();
  4. }
复制代码

4. 然后在DLL的工程属性中,将MFCDLL_EXPORTS宏定义添加到预处理器定义中。

这样,在DLL加载时,就会自动调用AutoRunShowDLLDlg()函数,从而运行ShowDLLDlg()函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 17:51:19 | 显示全部楼层
isdkz 发表于 2023-5-25 14:23
在MFCdll.cpp文件中,可以添加一个导出函数,该函数在DLL加载时自动调用并运行ShowDLLDlg()函数。具体步骤 ...

快申请卓越VIP呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 17:59:23 | 显示全部楼层
sfqxx 发表于 2023-5-25 17:51
快申请卓越VIP呀

申请了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 17:59:36 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 18:02:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-25 18:45:49 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-5-25 18:02
据说论坛要改版:https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=228737&pid=6243386

wc
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-24 01:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表