日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态链接库 仅有.dll文件时候的使用方法

發布時間:2023/12/10 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态链接库 仅有.dll文件时候的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在沒有.h和.lib文件時,需要函數指針和WIN32 API函數?LoadLibrary,?GetProcAddress?和FreeLibrary

只需要.dll文件即可(將.dll文件置入工程目錄中)。

LoadLibrary

進程調用?LoadLibrary以顯式鏈接到 DLL。?如果函數執行成功,它會將指定的 DLL 映射到調用進程的地址空間中并返回該 DLL 的句柄。

此句柄可以與其他函數(如?GetProcAddress?和FreeLibrary)一起在顯式鏈接中使用。

LoadLibrary?將嘗試使用用于隱式鏈接的相同搜索序列來查找 DLL。?如果系統無法找到所需的 DLL 或者入口點函數返回 FALSE,

則?LoadLibrary?將返回 NULL。?如果對?LoadLibrary?的調用所指定的 DLL 模塊已映射到調用進程的地址空間中,

則該函數將返回該 DLL 的句柄并遞增模塊的引用數。

如果 DLL 具有入口點函數,則操作系統將在調用?LoadLibrary?的線程的上下文中調用此函數。?

如果由于以前調用了?LoadLibrary,但沒有相應地調用?FreeLibrary?函數,從而導致已經將 DLL 附加到進程,則不會調用此入口點函數。

如果 Windows 無法加載 DLL,則進程會嘗試從錯誤中恢復。?例如,進程會通知用戶所發生的錯誤,并要求用戶指定 DLL 的其他路徑。

?

GetProcAddress

顯式鏈接到 DLL 的進程調用?GetProcAddress?來獲取 DLL 導出函數的地址。?

使用返回的函數指針調用 DLL 函數。?

GetProcAddress?將(由?LoadLibrary或?GetModuleHandle?返回的)DLL 模塊句柄和要調用的函數名或函數的導出序號用作參數。

由于是通過指針調用 DLL 函數并且沒有編譯時類型檢查,需確保函數的參數是正確的,以便不會超出在堆棧上分配的內存和不會導致訪問沖突。?

幫助提供類型安全的一種方法是查看導出函數的函數原型,并創建函數指針的匹配 typedef。

FreeLibrary

處理鏈接到 DLL 的顯式調用函數,FreeLibrary?當不再需要 DLL 模塊。?此函數遞減模塊的引用數,如果引用數為零,此函數便從進程的地址空間中取消模塊的映射。

?

#include <iostream> #include <windows.h> //使用函數和某些特殊變量 typedef void (*DLLFunc)(int,int); //確定調用函數的形參 int main() {DLLFunc dllFunc;HINSTANCE hInstLibrary = LoadLibrary("sub.dll");//加載.dllif (hInstLibrary == NULL){FreeLibrary(hInstLibrary);}dllFunc = (DLLFunc)GetProcAddress(hInstLibrary, "sub");//第二個參數為要調用的函數名稱if (dllFunc == NULL){FreeLibrary(hInstLibrary);}dllFunc(5,4);FreeLibrary(hInstLibrary);return(1); }

?

總結

以上是生活随笔為你收集整理的动态链接库 仅有.dll文件时候的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。