zoukankan      html  css  js  c++  java
  • 【旧博文】动态库的动态连接与静态连接

    DLL(动态链接库),按名取意是动态链接的库。但dll分动态链接和静态链接。

    静态链接的意思是以lib作为导出函数头加载dll,这样的动态库加载编译後,执行程序的初期就判断是否用dll文件

    /*test.cpp*/

    #ifdef      __cplusplus
    #define     EXPORT extern "C" __declspec (dllexport)
    #else
    #define     EXPORT __declspec (dllexport)
    #endif
    EXPORT      long sum(int a, int b)
    {
    return a+b;
    }
    #ifdef      UNICODE
    以上类似的代码在编译的时候会生成一个lib文件来包含dll的函数名
    调用方式如下
     
    #pragma comment(lib, “test.lib”)//lib库文件
    #ifdef      __cplusplus
    #define     IMPORT extern "C" __declspec (dllimport)
    #else
    #define     IMPORT __declspec (dllimport)
    #endif
    EXPORT      long sum(int a, int b);
    之后,在下面的程序按照普通函数调用即可。
     
    另一种是动态使用dll,这种方式是当程序使用dll时才判断是否用此动态库文件。这种方法也适用于丢失lib文件的dll,
    /*调用动态dll*/
               typedef long(__cdecl *TESTDLL)(int a, int b);
               HINSTANCE hmod;
               /*调入动态库*/
               hmod = ::LoadLibrary("test.dll");
               if (hmod == NULL)
               {
                  AfxMessageBox("Fail");
               }
               TESTDLL lpproc;
               lpproc = (TESTDLL)GetProcAddress(hmod, "sum");
               if (lpproc != (TESTDLL)NULL)
               {
                    /*执行动态库中的函数*/
                    long result = (*lpproc)(cd)(1, 2);
                          result存储的就是计算的结果。
               }
      FreeLibrary(hmod);
      }
     
    以上仅针对两种形态进行解读,并没有涉及到深层次的资源等东西。
    我的臆想是这样,在自己做程序的时候,比如学习程序设计的时候,可以使用动态加载,这样会节省内存资源。而在给公司做的时候,尽量用lib连接的方式,因为客户可能误删dll文件,在程序初始化时候提示错误比使用一段时间后弹出错误要好吧。
  • 相关阅读:
    Android 3.0 r1 API中文文档(108) —— ExpandableListAdapter
    Android 3.0 r1 API中文文档(113) ——SlidingDrawer
    Android 3.0 r1 API中文文档(105) —— ViewParent
    Android 中文 API (102)—— CursorAdapter
    Android开发者指南(4) —— Application Fundamentals
    Android开发者指南(1) —— Android Debug Bridge(adb)
    Android中文API(115)——AudioFormat
    Android中文API(116)——TableLayout
    Android开发者指南(3) —— Other Tools
    Android中文API (110) —— CursorTreeAdapter
  • 原文地址:https://www.cnblogs.com/ldr123/p/2389609.html
Copyright © 2011-2022 走看看