程式集 CC 動態鏈結庫

2021-07-25 03:22:45 字數 1820 閱讀 4148

#ifndef __head_dynamic

#define __head_dynamic

int __declspec(dllexport) dynamicadd( int param1, int param2 );

#endif

[win32dynamic.cpp]

#include "stdafx.h"

#include "win32dynamic.h"

int dynamicadd( int param1, int param2 )

編譯成功以後,可以看到輸出目錄輸出了相應的dll:win32dll.dll

可以使用vc6.0自帶的depends檢視win32動態匯出庫的輸出內容。

建立win32控制台,動態鏈結庫測試程式win32dyanmictest

#include "stdafx.h"

// hinstance 宣告需要包含該標頭檔案

#include "afx.h"

typedef int (* dynamic_addfunc)( int, int );

int _tmain(int argc, _tchar* argv)

else

}return 0;

}

測試結果:

(奇怪我們並沒有在動態鏈結庫中找到該函式)

我們再用depends來看dll匯出的函式

函式名function一欄中我們看到函式名字並不是dynamicadd,我們修改下我們的getprocaddress中的引數

\\ ...

dynamic_addfunc pfunc = (dynamic_addfunc)::getprocaddress( hdll, "?dynamicadd@@yahhh@z" );

\\ ...

測試結果:

動態庫中的函式正確的被呼叫了

在之前的專案中我們使用extern 「c」 對匯出函式進行修飾

( c必須大寫 )

[win32dynamic.h]

#ifndef __head_dynamic

#define __head_dynamic

extern "c" int __declspec(dllexport) dynamicadd( int param1, int param2 );

#endif

[win32dynamic.cpp]

#include "stdafx.h"

#include "win32dynamic.h"

extern "c" int dynamicadd( int param1, int param2 )

再用depends去看dll中的匯出函式的時候,發現函式匯出名字正常了

這個時候執行最早的**的時候程式就能夠找到dynamicadd函式了。

動態鏈結庫 靜態鏈結庫

包含標頭檔案和庫 idir 指定編譯查詢標頭檔案的目錄,常用於查詢第三方的庫的標頭檔案,例 gcc test.c i.inc o test。ldir 指定鏈結時查詢lib的目錄,常用於查詢第三方庫。llibrary 指定額外鏈結的lib庫 巨集定義 dmacro 以字串 1 預設值 定義 macro...

靜態鏈結庫 動態鏈結庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll windows上對應的是.lib dll ...

靜態鏈結庫,動態鏈結庫

關於靜態鏈結庫,參考如下博文 當你完成了 開發,想把這個 給別人用,但是又不希望別人看到原始碼,就要給別人乙個庫和標頭檔案,庫和標頭檔案是配合的,缺一不可。或者過程相反,你從別人那裡拿到乙個庫和標頭檔案來使用。那麼如何編譯生成乙個庫給他人,如何使用從他人那裡拿到的庫呢?範例1 我們想把linuxfr...