首页 > 其他分享 >MFC-动态链接库

MFC-动态链接库

时间:2023-05-12 10:47:53浏览次数:35  
标签:MFC 函数 PROCESS DLL 调用 线程 动态链接库 DllMain

创建项目

 

framework.h文件

该文件在编译Dll时需要将所有在你的项目中需要使用的头文件包含进去

 

关于dllmain.cpp

DLL程序入口点函数DllMain:

仅导出资源的DLL可以没有DllMain函数

 

 参数1:HMODULE hModule  指向DLL本身的实例句柄

参数2:DWORD  ul_reason_for_call  指明了DLL被调用的原因,可以有以下4个取值:

    DLL_PROCESS_ATTACH:当DLL被进程 <<第一次>> 调用时,导致DllMain函数被调用,同时ul_reason_for_call的值为DLL_PROCESS_ATTACH,

    如果同一个进程后来再次调用此DLL时,操作系统只会增加DLL的使用次数,不会再用DLL_PROCESS_ATTACH调用DLL的DllMain函数。

■DLL_PROCESS_DETACH:
当DLL被从进程的地址空间解除映射时,系统调用了它的DllMain,传递的ul_reason_for_call值是DLL_PROCESS_DETACH。
★如果进程的终结是因为调用了TerminateProcess,系统就不会用DLL_PROCESS_DETACH来调用DLL的DllMain函数。这就意味着DLL在进程结束前没有机会执行任何清理工作。
■DLL_THREAD_ATTACH:
当进程创建一线程时,系统查看当前映射到进程地址空间中的所有DLL文件映像,并用值DLL_THREAD_ATTACH调用DLL的DllMain函数。 新创建的线程负责执行这次的DLL的DllMain函数,只有当所有的DLL都处理完这一通知后,系统才允许线程开始执行它的线程函数。
■DLL_THREAD_DETACH:
如果线程调用了ExitThread来结束线程(线程函数返回时,系统也会自动调用ExitThread),系统查看当前映射到进程空间中的所有DLL文件映像,并用DLL_THREAD_DETACH来调用DllMain函数,通知所有的DLL去执行线程级的清理工作。

参数3:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:MFC,函数,PROCESS,DLL,调用,线程,动态链接库,DllMain
From: https://www.cnblogs.com/liming19680104/p/17393086.html

相关文章

  • MFC-ShellExecuteEx打开文件
     打开执行程序SHELLEXECUTEINFOShellInfo;/*typedefstruct_SHELLEXECUTEINFO{DWORDcbSize;存储该结构的长度,以字节为单位ULONGfMask;一个标志数组,用来设置其他成员的有效性SEE_MA......
  • MFC-TerminateProcess终止进程
     TCHARpath[]=_T("C:\\WINDOWS\\NOTEPAD.EXEC:\\123.txt");PROCESS_INFORMATIONinfo;STARTUPINFOsi={sizeof(si)};BOOLb=CreateProcess(NULL,path,NULL,NULL,FALSE,NULL,NULL,NULL,&si,&info);//创建一个新的进......
  • C++MFC数据库程序设计[2023-05-10]
    C++MFC数据库程序设计[2023-05-10]项目必须使用面向对象程序设计的方法来完成,项目中涉及的数据存取必须由数据库完成,同时程序必须有UI(图形或菜单均可)界面,必须完成数据录入、修改、删除、插入、浏览、查询和排序等功能。是否使用MFC中的对话框、单文档等,由同学们自行决定。即......
  • MFC-进程
     ExitProcess结束进程                                      不同程序进程间通信 GetCurrentProcess获取当前进程的伪句柄   IsWow64Process32位进程是否运行在64位操作系统中CreatePro......
  • P48静态链接库-动态链接库
    静态编译:优点:实现代码的重复使用方便缺点:将二进制代码直接编译到exe中反汇编无法识别使用静态链接生成的可执行文件体积较大,造成浪费 我们常用的printf、memcpy、strcpy等就来自这种静态库 静态链接库的代码在lib中而动态链接库的代码在dll里面创建静态链接库: ......
  • MFC-GetProcAddress获取动态链接库中函数的地址
     HMODULEhmodule=::GetModuleHandle(_T("kernel32.dll"));//获取动态链接库的模块句柄typedefDWORD(*p)(void);//声明函数指针数据类型charch[]="GetCurrentThreadId";//【特别注意:这个函数名必须是ANSI的char类型】pf=(p):......
  • MFC-GetModuleHandle获取动态链接库的模块句柄
     HMODULEhmodule=::GetModuleHandle(_T("kernel32.dll"));//获取动态链接库的模块句柄/*参数:LPCTSTR指向含有模块名称字符串的指针返回值:HMODULE,如执行成功成功,则返回模块句柄。零表示失败。获取错误信息*/     ......
  • MFC-GDI+
           ......
  • 关于 “无法启动此程序,因为计算机中丢失mfc140.dll,尝试重新安装该程序已解决此问题”
      这个问题花了很久的时间百度,后来终于理解了dll文件的作用。VC运行库有必要下吗?VC++运行库有什么用?vc运行库里面包含的dll和ocx文件可以确保很多软件能够正常运行,因为有很多软件是用VC++语言编写的,那么在运行的时候也需要相应的运行库支持,下面系统之家小编来详细介绍一下V......
  • MFC-透明度算法
           ......