zoukankan      html  css  js  c++  java
  • 静态链接到 MFC 的规则 DLL

    静态链接到 MFC 的规则 DLL 是在内部使用 MFC 的 DLL,这类 DLL 中的导出函数可由 MFC 或非 MFC 可执行文件调用。正如名称所描述的,这类 DLL 是使用 MFC 静态链接库版本生成的。函数通常是通过标准 C 接口从规则 DLL 导出的。有关如何编写、生成和使用规则 DLL 的示例,请参见示例 DLLScreenCap


    请注意,Visual C++ 文档中不再使用 USRDLL 一词。静态链接到 MFC 的规则 DLL 具有与原来的 USRDLL 相同的特性。

    静态链接到 MFC 的规则 DLL 具有下列功能:


    客户端可执行文件可以用任何支持使用 DLL 的语言(C、C++、Pascal、Visual Basic 等)编写;它不必是 MFC 应用程序。


    DLL 可以链接到由应用程序使用的同一 MFC 静态链接库。已不再有单独用于 DLL 的静态链接库版本。


    在 MFC 4.0 版之前,USRDLL 与静态链接到 MFC 的规则 DLL 提供相同的功能类型。自 Visual C++ 4.0 版起,“USRDLL”一词已过时。


    静态链接到 MFC 的规则 DLL 具有下列要求:


    这类 DLL 必须实例化从 CWinApp 派生的类。


    此类型的 DLL 使用 MFC 提供的 DllMain。与在标准 MFC 应用程序中一样,将所有 DLL 特定的初始化代码放到 InitInstance 成员函数中,将终止代码放到 ExitInstance 中。


    尽管“USRDLL”一词已过时,但仍必须在编译器命令行上定义“_USRDLL”。此定义确定从 MFC 头文件中复制的声明。


    与 MFC 应用程序相同,规则 DLL 必须有一个 CWinApp 派生的类和此应用程序类的单个对象。然而,与应用程序的 CWinApp 对象不同,DLL 的 CWinApp 对象没有主消息泵。

    请注意,CWinApp::Run 机制不适用于 DLL,因为应用程序拥有主消息泵。如果 DLL 打开无模式对话框或有自己的主框架窗口,则应用程序的主消息泵必须调用由 DLL 导出的例程,而该例程应会反过来调用 DLL 应用程序对象的 CWinApp::PreTranslateMessage 成员函数。

    有关此函数的示例,请参见 DLLScreenCap 示例。

    符号通常是通过标准 C 接口从规则 DLL 导出的。从规则 DLL 导出的函数的声明形如:



    复制
    extern "C" __declspec(dllexport) MyExportedFunction( );  

    规则 DLL 内的所有内存分配都应在该 DLL 内进行;DLL 不应向调用可执行文件传递或从调用可执行文件接收下列任何指针:


    指向 MFC 对象的指针


    指向由 MFC 分配的内存的指针


    如果需要执行上述任一操作,或者需要在调用可执行文件和 DLL 之间传递 MFC 派生的对象,则必须生成扩展 DLL。

    仅当创建了数据副本后,在应用程序和 DLL 之间传递指向 C 运行时库所分配的内存的指针才是安全的。一定不要删除这些指针或调整它们的大小,也不要在没有创建内存副本的情况下使用这些指针。

    静态链接到 MFC 的 DLL 无法同时动态链接到共享 MFC DLL。静态链接到 MFC 的 DLL 像任何其他 DLL 一样动态绑定到应用程序;而应用程序像任何其他 DLL 一样链接到静态链接到 MFC 的 DLL。

    标准 MFC 静态链接库依据 MFC DLL 命名约定中描述的约定进行命名。但是,在 MFC 3.0 版及更高版本中,不再需要向链接器手动指定希望链接的 MFC 库版本,而是由 MFC 头文件基于预处理器定义(如 _DEBUG 或 _UNICODE)自动确定要链接到的 MFC 库的正确版本。MFC 头文件添加 /DEFAULTLIB 指令来指示链接器链接到特定的 MFC 库版本中。

  • 相关阅读:
    uva-679 Dropping Balls UVA
    并查集模板
    最大子段和模板
    uva 10048 Audiophobia UVA
    2018/11/2 周五集训队第三次比赛补题题解
    单源最短路径算法小总结
    DP背包问题小总结
    SpringMVC的请求-获得请求参数-获得请求头信息
    SpringMVC的请求-获得请求参数-自定义类型转换器
    SpringMVC的请求-获得请求参数-Restful风格的参数的获取
  • 原文地址:https://www.cnblogs.com/tianlangshu/p/1989568.html
Copyright © 2011-2022 走看看