乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用VS2008創(chuàng)建和調(diào)用動態(tài)鏈接庫

       行走在理想邊緣 2019-04-18

      1. 動態(tài)鏈接庫的概念及優(yōu)點(diǎn)

           動態(tài)鏈接庫是一個函數(shù)和變量的集合,在調(diào)用它的程序運(yùn)行時才被加載。因此,動態(tài)鏈接庫和可執(zhí)行程序是分離的。

           動態(tài)鏈接庫具有以下優(yōu)點(diǎn):

              (1) 隱藏源代碼;

              (2)實(shí)現(xiàn)代碼重用;

              (3)當(dāng)程序調(diào)用DLL中的函數(shù)時不需要重新編譯,提高編譯速度;

              (4)當(dāng)多個程序調(diào)用同一DLL中函數(shù)時,內(nèi)存中只有一個副本,節(jié)省內(nèi)存空間;

              (5)可通過替換DLL來實(shí)現(xiàn)程序的維護(hù)和升級。

      2.動態(tài)鏈接庫加載的方法

          當(dāng)在應(yīng)用程序中加載DLL時,有兩種方法來調(diào)用導(dǎo)出的DLL函數(shù):加載時動態(tài)鏈接運(yùn)行時動態(tài)鏈接

          在加載時動態(tài)鏈接中,應(yīng)用程序像調(diào)用本地函數(shù)一樣對導(dǎo)出的DLL函數(shù)進(jìn)行顯式調(diào)用。要使用加載時動態(tài)鏈接,請在編譯和鏈接應(yīng)用程序時提供頭文件(.h)和導(dǎo)入庫文件(.lib)。當(dāng)您這樣做時,鏈接器將向系統(tǒng)提供加載DLL所需的信息,并在加載時解析導(dǎo)出的DLL函數(shù)的位置。

          在運(yùn)行時動態(tài)鏈接中,應(yīng)用程序調(diào)用LoadLibrary函數(shù)或LoadLibraryEx函數(shù)以在運(yùn)行時加載DLL。成功加載DLL后,可以使用GetProcAddress函數(shù)獲得要調(diào)用的導(dǎo)出的DLL函數(shù)的地址。在使用運(yùn)行時動態(tài)鏈接時,無需使用導(dǎo)入庫文件。

          可以根據(jù)下面的 準(zhǔn)則來判斷使用哪一種鏈接方式。

        (1)啟動性能 如果應(yīng)用程序的初始啟動性能很重要,則應(yīng)使用運(yùn)行時動態(tài)鏈接

        (2)易用性 在加載時動態(tài)鏈接中,導(dǎo)出的 DLL 函數(shù)類似于本地函數(shù)。這使您可以方便地調(diào)用這些函數(shù)。

        (3)應(yīng)用程序邏輯 在運(yùn)行時動態(tài)鏈接中,應(yīng)用程序可以分支,以便按照需要加載不同的模塊。在開發(fā)多語言版本時,這一點(diǎn)很重要。

      3.創(chuàng)建動態(tài)鏈接庫

        3.1 建立一個工程項(xiàng)目

            打開Visual Studio 2008,F(xiàn)ile -> New -> Project…,選擇Win32 Console Application,Name設(shè)置為myDLLTest。

           next-> Application type->Dll,additional options->Empty project,單擊Finish按鈕。

        3.2  添加myDllTest.h文件     

      <pre name="code" class="cpp">#ifndef MY_DLL_TEST_H
      #define MY_DLL_TEST_H
       
      #ifdef EXPORTING_DLL
      #define API_TYPE __declspec(dllexport)
      #else
      #define API_TYPE __declspec(dllimport)
      #endif
       
      API_TYPE double my_add(double x, double y);
      API_TYPE double my_subtract(double x, double y);
      API_TYPE double my_times(double x, double y);
       
      #endif
      
         3.3 添加myDllTest.cpp文件
      
      
      
      #include "myDllTest.h"
      #define EXPORTING_DLL
      double my_add(double x, double y)
      {
            return x + y;
      }
       
      double my_subtract(double x, double y)
      {
            return x - y;
      }
       
      double my_times(double x, double y)
      {
            return x * y;
      }
       
         3.4 編譯

      myDllTest.dll,myDllTestd.lib,myDllTest.lib和myLibTest.h是我們最終交付給用戶的文件。

      加載時動態(tài)鏈接方式調(diào)用動態(tài)鏈接庫

         4.1 環(huán)境變量設(shè)置
          如果工程比較大,則可以在本地硬盤的其它位置新建一個文件夾,命名為myDTest,再新建三個子文件夾bin,include和lib,將DLL文件放到bin中,H文件放到include中,LIB文件放到lib中。計算機(jī)->屬性->高級系統(tǒng)設(shè)置->環(huán)境變量。在系統(tǒng)變量->新建->環(huán)境變量名myLibTest,變量值為myDTest文件夾所在目錄;用戶變量->編輯Path環(huán)境變量,添加myDTest中bin的路徑;(不同的語句用;間隔)。
         4.2 VS環(huán)境設(shè)置
         
      工程比較小時,可將DLL,H和LIB文件直接復(fù)制到當(dāng)前工程下,不需要添加環(huán)境變量。這時在包含對應(yīng)頭文件時應(yīng)當(dāng)使用雙引號而不是尖括號。
         4.3 新建調(diào)用動態(tài)庫的工程
          
      #include <iostream>
      #include <myDllTest.h>
      using namespace std;
       
      int main(int argc,char **argv)
      {
          
           double x = 2.5;
           double y = 1.7;
       
           cout << x << " + " << y << " = " << my_add(x, y) << endl;
           cout << x << " - " << y << " = " << my_subtract(x, y) << endl;
           cout << x << " * " << y << " = " << my_times(x, y) << endl;
       
           return 0;
      }
          4.4 環(huán)境設(shè)置
          在Project -> Properties->configuration properties,C++ ->addtional include direction中添加include文件路徑;link -> general ->Additional library Direction中添加lib的路徑,在link->input->additional dependence。Debug模式下添加Debug模式下編譯的LIB文件,Release模式下添加Release模式下編譯的LIB文件。

          4.5 運(yùn)行
           按下快捷鍵Ctrl+5,編譯程序

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多