博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
_USRDLL _AFXDLL _WINDLL 三种dll编译宏的具体含义
阅读量:2392 次
发布时间:2019-05-10

本文共 2534 字,大约阅读时间需要 8 分钟。

常见的编译参数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 Win32DllMain entry point that initializ es yourCWinAppderived object as in a normal MFC application. Placeall DLL-specific initialization in theInitInstancememberfunction as in a normal MFC application.

相关文章:

转载地址:http://kihab.baihongyu.com/

你可能感兴趣的文章
代码实现| springboot+mybatis+PageHelper实现Mysql数据分页
查看>>
代码规范| 面向对象六大基本原则
查看>>
IDEA| Error resolving template [index], template might not exist or might not be accessible by any
查看>>
力扣题解| 169. 多数元素
查看>>
力扣题解| 999. 可以被一步捕获的棋子数
查看>>
力扣题解| 225. 用队列实现栈
查看>>
力扣题解| 912. 排序数组
查看>>
力扣题解| 1160. 拼写单词
查看>>
力扣题解| 剑指 Offer 57 - II. 和为s的连续正数序列
查看>>
力扣题解| 66. 加一
查看>>
力扣题解| 67. 二进制求和
查看>>
力扣题解| 69. x 的平方根
查看>>
力扣题解| 70. 爬楼梯
查看>>
力扣题解| 剑指 Offer 64. 求1+2+…+n
查看>>
SQL Server中字符串处理函数
查看>>
SqlServer获取当前日期
查看>>
【解决方案】Oracle插入/更新CLOB字段报ORA-01704:字符串文字太长
查看>>
【12c】12c RMAN新特性之UNTIL AVAILABLE REDO--自动恢复到REDO终点的步骤简化
查看>>
【转载】 MySQL数据库“十宗罪”(十大经典错误案例)
查看>>
Oracle 11g RAC安装--基于openfiler存储+多路径+udev方式
查看>>