zoukankan      html  css  js  c++  java
  • _USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义

    常见的编译参数VC建立项目时总会定义"Win32"。控制台程序会定义"_CONSOLE",否则会定义"_WINDOWS"。Debug版定义"_DEBUG",Release版定义"NDEBUG" 
      与MFC DLL有关的编译常数包括:
      _WINDLL 表示要做一个用到MFC的DLL
      _USRDLL 表示做一个用户DLL(相对MFC扩展DLL而言) 
      _AFXDLL 表示使用MFC动态链接库的 regular DLL
      _AFXEXT 表示要做一个MFC扩展DLL
      所以:
      Regular, statically linked to MFC _WINDLL,_USRDLL 
      Regular, using the shared MFC DLL _WINDLL,_USRDLL,_AFXDLL
      Extension DLL _WINDLL,_AFXDLL,_AFXEXT

     

     

    Building Your DLL

     

    When compiling regular DLLs that statically link to MFC, the symbols "_USRDLL" and "_WINDLL" must be defined. Your DLL code must also be compiled with the following compiler switches:

    •/D_WINDLL      signifies the compilation is for a DLL 
    •/D_USRDLL      specifies you are building a regular DLL

     

    When compiling regularDLLs that statically link to MFC, the symbols "_USR DLL" and"_WINDLL" must be defined. Your DLL code must also be compile dwith the following compiler switches:

    When compiling regular DLLs that dynamicallylink to MFC, you must define t he above symbols and use the above compilerswitches. Additionally, the sy mbol "_AFXDLL" must be definedand your DLL code must be compiled with:

    •/D_AFXDLL     specifies that you are building a regular DLL that dynamicall y links to MFC

    The interfaces (APIs) between the application and the DLL must beexplicitlyexported. It is recommended that you define your interfaces to be lowbandw idth, sticking to C interfaces where possible. More direct C interfaces areeasi er to maintain than more complex C++ classes.

    Place your APIs in aseparate header that can be included by both C and C++files (that way you won'tlimit your DLL customers to C++ programmers). Se e the header ScreenCap.h in theMFC Advanced Concepts sample DLLScreen Cap for an example. To export yourfunctions, enter them in theEXPORTSs ection of your moduledefinition file (.DEF) or include__declspec(dllexpor t)on yourfunction definitions. Use__declspec(dllimport)to import thesefunctions into the client executable.

    You must add theAFX_MANAGE_STATEmacro at the beginning of all the e xportedfunctions in regular DLLs that dynamically link to MFC to set the curr ent modulestate to the one for the DLL. This is done by adding the followingline of codeto the beginning of functions exported from the DLL:

    AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

    WinMain->DllMain

    The MFC library defines the standard Win32DllMainentry point that initializ es yourCWinAppderived object as in a normal MFC application. Placeall DLL-specific initialization in theInitInstancememberfunction as in a normal MFC application.

  • 相关阅读:
    WindowsService 安装后报错: 无法启动计算机“.”上的服务 解决方案
    Windows 服务入门指南
    STM32学习及应用笔记二:一次运算符优先级造成的错误
    STM32F412应用开发笔记之十:多组分气体分析仪设计验证
    OneNET麒麟座应用开发之七:控制采样电机
    OneNET麒麟座应用开发之六:与气体质量流量控制器通讯
    OneNET麒麟座应用开发之五:获取加速度传感器ADXL345数据
    STM32应用实例十:简析STM32 I2C通讯死锁问题
    OneNET麒麟座应用开发之四:数据上传测试
    OneNET麒麟座应用开发之三:获取温湿度数据
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318723.html
Copyright © 2011-2022 走看看