Visual C 確定要使用的鏈結方法

2021-08-22 19:49:47 字數 792 閱讀 8557

visual c++

確定要使用的鏈結方法

應用程式的**呼叫匯出 dll 函式時發生隱式鏈結。當呼叫可執行檔案的源**被編譯或被彙編時,dll 函式呼叫在物件**中生成乙個外部函式引用。若要解析此外部引用,應用程式必須與 dll 的建立者所提供的導入庫(.lib 檔案)鏈結。

導入庫僅包含載入 dll 的**和實現 dll 函式呼叫的**。在導入庫中找到外部函式後,會通知鏈結器此函式的**在 dll 中。要解析對 dll 的外部引用,鏈結器只需向可執行檔案中新增資訊,通知系統在程序啟動時應在何處查詢 dll **。

系統啟動包含動態鏈結引用的程式時,它使用程式的可執行檔案中的資訊定位所需的 dll。如果系統無法定位 dll,它將終止程序並顯示乙個對話方塊來報告錯誤。否則,系統將 dll 模組對映到程序的位址空間中。

如果任何 dll 具有(用於初始化**和終止**的)入口點函式,作業系統將呼叫此函式。在傳遞到入口點函式的引數中,有乙個指定用以指示 dll 正在附帶到程序的**。如果入口點函式沒有返回 true,系統將終止程序並報告錯誤。

最後,系統修改程序的可執行**以提供 dll 函式的起始位址。

與程式**的其餘部分一樣,dll **在程序啟動時對映到程序的位址空間中,且僅當需要時才載入到記憶體中。因此,由 .def 檔案用來在 windows 的早期版本中控制載入的preloadloadoncall**屬性不再具有任何意義。

大部分應用程式使用隱式鏈結,因為這是最易於使用的鏈結方法。但是有時也需要顯式鏈結。下面是一些使用顯式鏈結的常見原因:

概念將可執行檔案鏈結到 dll

如何決定要使用多少點來做FFT

fft程式,輸入是一組複數,輸出也是一組複數,想問一下輸入到底應該輸入什麼,輸出的複數的含義是什麼?給定一組序列的抽樣值,如何用fft確定它的頻率?首先,fft函式出來的應該是個複數,每乙個點分實部虛部兩部分。假設採用1024點fft,取樣頻率是fs,那麼第乙個點對應0頻率點,第512點對應的就是f...

為什麼企業一定要使用CRM系統?

目前,隨著資訊化技術的不斷發展,許多企業都在開始採用crm系統輔助企業做好客戶關係管理,然而企業為什麼一定要採用crm系統,相信很多企業都不清楚,只知道大家既然都在使用,那麼肯定是對的。teamface企典相信,每個人有每個人的觀點,不過都認同的一點就是crm系統能夠幫到企業,下面我們就一起來了解下...

Visual C 編譯鏈結選項的設定

上一節說道,組合語言的 已經告一段落了,接下來我們將進入c 的世界了。但是visual c 不是被設計用來開發作業系統的。假如我們用visual c 設計乙個程式,那麼在預設情況下,它必須跑在windows下。所以我們必須做一些工作使得我們的程式能夠脫離windows執行。因此,為了達到這個目的,我...