第19講 動態鏈結庫

2022-08-17 07:00:21 字數 1279 閱讀 9880

_declspec(dllexport)識別符號宣告的函式效率更高,相對於用extern

3,可以用dependency walker檢視動態鏈結庫中匯出的函式

4,如果動態鏈結庫專案中源程式自己要使用動態鏈結庫函式,則在動態鏈結庫標頭檔案中使用預編譯巨集

#ifdef dll1_api

#else

#define dll1_api _declspec(dllexport)

#endif // dll1_api

動態鏈結庫原始檔中使用

#define dll1_api _declspec(dllexport)

#include "dll1.h"

5,自己搜msdn時找到的一種在各種字串型別之間進行轉換的方法  

如char 和wchar_t之間的轉換

char *orig = "hello, world!";

size_t newsize = strlen(orig) + 1;

wchar_t * wcstring = new wchar_t[newsize];

size_t convertedchars = 0;

mbstowcs_s(&convertedchars, wcstring, newsize, orig, _truncate);

6,在mfc中可以呼叫getforegroundwindow(),返回指向前台視窗(使用使用者當前)的視窗。

7,為了防止在不同的編譯器中以及c++編寫的動態鏈結庫能被用c寫的程式呼叫,則在匯出函式前要加extern 「c」 如#define dll1_api extern "c" _declspec(dllexport)

8,如果匯出函式的呼叫約定使用了標準呼叫約定_stdcall 可以通過模組定義檔案的方式來解決名字改編的問題。模組定義檔案的字尾名是.def,模組定義檔案可以按如下所示寫:

library dll2

exports

addsubtract

hinstance hinst;

hinst = loadlibrary(_t("dll2.dll"));

typedef int(*addproc)(int a, int b);

addproc pdd = (addproc)getprocaddress(hinst, "add");

10,makeintresource()巨集,可以將動態鏈結庫序號轉化為字串

11, dllmain動態鏈結庫入口函式

12,在不需要動態鏈結庫的時候,可以用freelibrary();

Chap 19 動態鏈結庫

chap 19 動態鏈結庫 一 只有在其他模組呼叫動態鏈結庫中的函式時,它才發揮作用。win32 api 中所有的函式都在dll 中,其中最重要的三個dll 1.kernel32.dll 所有與記憶體操作,執行緒,程序相關的操作。2.user32.dll 所有與執行使用者介面相關的操作。3.gdi3...

動態鏈結庫 靜態鏈結庫

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

靜態鏈結庫 動態鏈結庫

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