zoukankan      html  css  js  c++  java
  • VS---《在VS2010中 使用C++创建和使用DLL》(001)

    VS---《在VS2010中 使用C++创建和使用DLL》(001)

      需要学习制作和使用动态库,现在知道:DLL调用有两种方式,一种是静态调用,另外一种是动态调用。详细的还不算明白,等后期深入学习在详细记录,这里先简单记录,熟悉“制作和调用DLL”的一般流程,具体的理解先不考虑。

      静态调用(同时需要.h头文件、LIB和DLL文件,缺一不可),静态调用是一种显式的调用方式,即在编程的时候便知道了被调用的DLL中的接口函数,在编译链接的时候将DLL与工程生成的exe相关联。

      动态调用(仅需要DLL,不需要头文件和LIB),动态调用是一种隐式的调用方式,即程序运行过程中装载DLL,然后获取指定函数名称的接口函数,然后再调用之。

      参照@https://blog.csdn.net/fightingforcv/article/details/41773391,在VS2010中 使用C++创建和使用DLL。尝试了一下,创建DLL工程和调用DLL工程:(1)在同一个VS工程下;(2)在两个不同的工程下,两个都好用,区别在哪儿,现在还不太清楚。

      重点:

    (1)创建DLL工程下生成的 .lib 和 .dll  复制到调用DLL工程下;

    (2)同一个VS工程下,创建DLL工程和调用DLL工程,注意“调用DLL工程”编译时,工程右键设置“设为启动项”之后再进行编译。

      知识点:

    (1)函数导出方式:
      在DLL的创建过程中,一种方式是_declspec( dllexport )方式导出函数的,另一种导出函数的方式是使用导出文件(.def)
      可以在DLL工程中,添加一个Module-Definition File(.def)文件。.def文件为链接器提供了有关被链接器程序的导出、属性及其它方面的信息。

     注,Module-Definition File(.def)文件的格式如下:
      LIBRARY语句说明.def文件对应的DLL;
      EXPORTS语句后列出要导出函数的名称。可以在.def文件中的导出函数名后加@n,表示要导出函数的序号为n(在进行函数调用时,这个序号有一定的作用)。

    (2)使用DLL:
      当我们的程序需要使用DLL时,就需要去加载DLL,在程序中加载DLL有两种方法,分别为“加载时动态链接”和“运行时动态链接”。
      在“加载时动态链接”中,应用程序像调用本地函数一样对导出的DLL函数进行显示调用。要使用加载时动态链接,需要在编译和链接应用程序时提供头文件和导入库文件(.lib)。当这样做的时候,链接器将向系统提供加载DLL所需的信息,并在加载时解析导出的DLL函数的位置;
      在“运行时动态链接”中,应用程序调用LoadLibrary函数或LoadLibraryEx函数以在运行时加载DLL。成功加载DLL后,可以使用GetProcAddress函数获得要调用的导出的DLL函数的地址。在使用运行时动态链接时,不需要使用导入库文件。

      PS 过程中也遇到了很多问题,几个重要问题与解决方式详见《问题》中的简单记录。

    ***************************************************************************************************

    **********************************************************************************************************************

  • 相关阅读:
    PyQt5-QComboBox控件使用
    PyQt5-按钮控件使用
    PyQt5-QTextEdit控件使用
    Ubuntu12.04下YouCompleteMe安装教程(部分)
    ubuntu下vim的简单配置
    VirtualBox下vim无法正常使用问题解决
    树莓派下ubuntu-mate中ssh服务的安装与开机后自启动
    水仙花小游戏
    C语言实现判断分数等级
    临时记录(不断更新)
  • 原文地址:https://www.cnblogs.com/carle-09/p/11041504.html
Copyright © 2011-2022 走看看