国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C++Builder中動態(tài)庫的鏈接問題

C++Builder中動態(tài)庫的鏈接問題

    動態(tài)庫鏈接到應(yīng)用程序中主要有兩種方式:隱式鏈接和顯式鏈接。隱式鏈接是常用方式。
   如果應(yīng)用程序和動態(tài)庫是分別在不同開發(fā)平臺上編制的,動態(tài)庫的導(dǎo)入庫(lib文件)可能會與應(yīng)用程序的開發(fā)平臺所要求的導(dǎo)入庫格式不相容,從而在應(yīng)用程序與動態(tài)庫隱式鏈接時,出現(xiàn)程序鏈接錯誤:contains invalid OMF record。例如在C++Builder開發(fā)平臺上鏈接Visual C++制作的動態(tài)庫時,就會出現(xiàn)上述的錯誤。解決這一問題,可以采用兩種方法:顯式連接法和使用C++Builder中提供的導(dǎo)入庫生成工具。

  顯式連接:顯式連接不需要在工程中加入導(dǎo)入庫和相應(yīng)的頭文件,只需要把動態(tài)庫放入指定的目錄下。在應(yīng)用程序中通過函數(shù)調(diào)用顯式的裝載和卸掉DLL,通過函數(shù)指針來調(diào)用DLL的導(dǎo)出函數(shù)。

  步驟:

  1. 調(diào)用LoadLibrary函數(shù)裝載DLL并得到模塊句柄;
  2. 調(diào)用GetProcAddress函數(shù)獲取指定導(dǎo)出函數(shù)的指針;
  3. 用這個函數(shù)的指針調(diào)用該函數(shù);
  4. 使用完畢后,用FreeLibrary釋放DLL。

  例子:

  用VC++制作一個動態(tài)庫:

 選new→Project→Win32—Dynamic—Link Library,加入addit.cpp

  extern ″C″

  {
    void  __declspec( dllexport ) addit(int a, int b, int *c)

   {
      *c = a + b;

   }

  }

  addit.h

  extern ″C″

  {void addit(int a, int b, int *c);}

    編譯鏈接生成addit.dll和addit.lib.在C++Builder程序中調(diào)用addit函數(shù)。

  C++Builder程序中:

  {
    HINSTANCE handle; //DLLa模塊的句柄
  FARPROC lpFarProc;
  void (*lpaddit)(int,int,int *);//指向addit函數(shù)的指針
  int ntemp;
  handle = LoadLibrary(″addit.dll″); //裝載addit.dll, 得到該庫句柄 addit.dll位于當(dāng)前目錄下
  lpFarProc = GetProcAddress(handle,″addit″);   //得到指向函數(shù)addit的指針
  lpaddit = (void(__cdecl *)(int, int, int *))lpFarProc; //指針類型轉(zhuǎn)換
  lpaddit(2,3,&ntemp); //使用addit函數(shù)
  FreeLibrary(handle); //將addit.dll從程序中卸掉
  }

 

    此程序在VC++ 5.0 和C++Builder 3.0下通過。

    使用C++Builder中提供的導(dǎo)入庫生成工具:先預(yù)處理,后隱式鏈接。

    步驟:

    1.用C++Builder提供的implib.exe工具重新生成該動態(tài)庫(xxx.dll)的導(dǎo)入庫(xxx.lib)。命令如下:

    implib addit.lib addit.dll.

    addit.dll為已有動態(tài)庫,addit.lib為要生成的導(dǎo)入庫。由此生成的導(dǎo)入庫addit.lib格式與C++Builder開發(fā)平臺是相容的;

    2.在動態(tài)庫的頭文件addit.h中,對其輸出函數(shù)重新說明,語句如下:

    extern __stdcall void addit( int a, int b, int *c);

    3.然后采用隱式鏈接法,將重新生成的導(dǎo)入庫(addit.lib)和重新說明的頭文件(addit.h)加入到C++Builder應(yīng)用程序的工程項目中,進(jìn)行編譯和連接。

    addit.dll按上述步驟操作,在VC++ 5.0 和C++Builder 3.0下通過。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
動態(tài)庫的顯式鏈接和隱式鏈接
DLL動態(tài)庫的創(chuàng)建,隱式加載和顯式加載
lib和dll的區(qū)別與使用
lib 和 dll 的區(qū)別、生成以及使用詳解
VC++中動態(tài)鏈接庫的顯示加載和隱式加載的區(qū)別?
【通達(dá)信】通達(dá)信DLL函數(shù)插件編程教程(動態(tài)庫)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服