GetProcAddress() LoadLibrary() DLL

GetProcAddress函數檢索指定的動態鏈接庫(DLL)中的輸出庫函數地址。

  函數原型:

  FARPROC GetProcAddress(

  HMODULE hModule, // DLL模塊句柄

  LPCSTR lpProcName // 函數名

  );

 參數:

 hModule

  [in] 包含此函數的DLL模塊的句柄。LoadLibrary、AfxLoadLibrary?或者GetModuleHandle函數可以返回此句柄。

  lpProcName

  [in] 包含函數名的以NULL結尾的字符串,或者指定函數的序數值。如果此參數是一個序數值,它必須在一個字的底字節,高字節必須為0。

  返回值:

  如果函數調用成功,返回值是DLL中的輸出函數地址。

  如果函數調用失敗,返回值是NULL。得到進一步的錯誤信息,調用函數GetLastError。

?

FARPROC 是一個4字節指針,指向一個函數的內存地址,例如
GetProcAddress 的返回類型就是一個FARPROC。
如果你要存放這個地址,可以聲明以一個 FARPROC變量來存放。

?

GetProcAddress返回的是一個函數地址的指針。
聲明:FARPROC WINAPI GetProcAddress(__in HMODULE hModule, __in LPCSTR LpProcName);
你應該知道你要的函數的類型是什么,可以用typedef的方法定義函數類型,然后定義一個這種類型的變量,你得到地址后,將地址的類型轉換并存到那個變量中就行了。例如:

?這是RunHook定義:
BOOL _stdcall RunHook(HMODULE hModule,DWORD dwThreadId)
{
HWndHook=::SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HOOKProc,hMod,dwThreadId);
return TRUE;
}

這是全局聲明:
typedef BOOL (_stdcall *funRunHook)(HMODULE hModule,DWORD dwThreadID);

這兩種調用都不行:
funRunHook RunHook;
RunHook=(funRunHook)GetProcAddress(hMod,"RunHook");

**************************************************************************************************************************

LoadLibrary加載動態庫失敗的解決辦法

方式一 采用LoadLibraryEx

轉載:http://blog.sina.com.cn/s/blog_62ad1b8101017qub.html

若DLL不在調用方的同一目錄下,可以用LoadLibrary(L"DLL絕對路徑")加載。但若調用的DLL內部又調用另外一個DLL,此時調用仍會失敗。解決辦法是用LoadLibraryEx:
LoadLibraryEx("DLL絕對路徑", NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
通過指定LOAD_WITH_ALTERED_SEARCH_PATH,讓系統DLL搜索順序從DLL所在目錄開始。


方式二 采用SetCurrentDir

轉載:http://blog.csdn.net/flyayi2006/article/details/5526982

跨目錄調用dll,你應該這樣
1 用GetCurrentDir保存當前的工作目錄
2 用SetCurrentDir將當前的工作目錄,設置為你的DLL所在的路徑,需要使用絕對路徑
3 用LoadLibrary你的DLL
4 使用SetCurrentDir恢復到原來的工作路徑


實例:

? ? TCHAR chCurDir[MAX_PATH] = {0};
? ? GetCurrentDirectory(MAX_PATH, chCurDir);
? ? SetCurrentDirectory(_T("E:\\test\\"));
? ? m_hDLL = LoadLibrary(_T("MyTest.dll"));
? ? SetCurrentDirectory(chCurDir);



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458759.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458759.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458759.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小學計算機輸入法主題教研設計,《拼音輸入法》教學設計.doc

10.拼音輸入法【教材分析】《拼音輸入法》是浙江攝影出版社出版的新版《小學信息技術》三年級下冊第三單元第10課。信息技術是一門技能課,學以致用是技能課的教學目的,相對來說,在小學生的學習和生活中,用到這項技能的地方還比較少…

圖論測試題(一)第一題:longest

第一題:longest 烏托邦有n個城市,某些城市之間有公路連接。任意兩個城市都可以通過公路直接或者間接到達,并且任意兩個城市之間有且僅有一條路徑(What does this imply? A tree!)。 每條公路都有自己的長度&#xff0…

RTC實時時鐘驅動

RTC(Real-Time Clock)實時時鐘為操作系統提供了一個可靠的時間,并且在斷電的情況下,RTC實時時鐘也可以通過電池供電,一直運行下去。 RTC通過STRB/LDRB這兩個ARM指令向CPU傳送8位數據(BCD碼)。數據包括秒&am…

Compass樣式重置

1. 全局樣式重置 main.scss文件插入 import "compass/reset"; 對應的生成css為 html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, sa…

計算機表格復制粘貼后不變,excel表格復制粘貼后格式不變

Excel使用過程中經常需要將一個表格內容復制粘貼到其他表格中去。如果原始表格設置了行高和列寬,選中要復制的區域復制后,當在其他表格選擇一個單元格進行粘貼時,行高和列寬就都變了。下面介紹excel表格復制粘貼后格式不變的操作方法。excel表…

C++ Primer章課后編程問題

1、代碼#include<iostream> int main() {using namespace std;int num1;int num2;int total0;cout << "請輸入開始數字\n";cin >> num1;cout << "請輸入結束數字\n";cin >> num2;for (num1; num1<num2; num1)total num1…

vps搭建網站服務器,vps如何架設網站服務器

彈性云服務器 ECS彈性云服務器(Elastic Cloud Server)是一種可隨時自助獲取、可彈性伸縮的云服務器&#xff0c;幫助用戶打造可靠、安全、靈活、高效的應用環境&#xff0c;確保服務持久穩定運行&#xff0c;提升運維效率三年低至5折&#xff0c;多種配置可選了解詳情手工部署D…

vs 常見問題匯總

vs添加對dll的引用 我們在使用vs進行開發調試的時候經常會遇到一個問題&#xff0c;就是當我們的主工程引用到其他工程更新的dll&#xff08;我們經常采用copy到工程目錄的方法&#xff09;、亦或者當我們的多個工程引用到同一個dll文件的時候&#xff0c;我們怎么來配置&#…

斯柯達柯珞克顯示服務器錯誤,斯柯達柯珞克原來還有四驅的版本,不信你看!...

?有望推出四驅版本?專利圖已經曝光?外觀沒有變化斯柯達柯珞克大家應該不會特別陌生&#xff0c;雖然它在前兩個月才正式上市&#xff0c;不過作為一款合資的緊湊型SUV來說&#xff0c;它的關注度還是不錯的。銷量上&#xff0c;4月份交出了2668輛的成績&#xff0c;雖然還不…

javascript實例——鼠標特效篇(包含2個實例)

鼠標是現在電腦的基本配置之一&#xff0c;也是最常用的輸入命令的工具之一。本文將將一些與鼠標有關系的特效。 1、跟隨鼠標移動的彩色星星 如題&#xff0c;會根據鼠標的移動而移動&#xff0c;并在鼠標周圍隨機來回移動&#xff0c;讓人感覺在放大縮小。根據書上的代碼做了一…

Perforce使用指南_forP4V

第一章 前言 Perforce SCM System是一款構建于可伸縮客戶/服務器結構之上的軟件配置管理工具。僅僅應用 TCP/IP&#xff0c;開發人員就能夠通過多種Perforce客戶端&#xff08;幾種平臺的GUI、WEB、或命令行&#xff09;訪問 Perforce服務器。Perforce能夠被快速和容易地部署…

sql語句示例

sql語句示例&#xff1a; 選區指定的列 select 圖書編號,圖書名稱 from 圖書查詢全部信息 select * from 圖書查詢信息之后更改所獲得的列的名稱 select 姓名 as 用戶名, 電話 as 聯系電話 from 用戶也可以這樣 select 用戶名姓名,聯系電話電話 from 用戶對某些列進行計筭后在顯…

曙光服務器優勢,5大核心優勢 探秘曙光Cloudview三大平臺

1Cloudview1.5核心優勢對于云計算而言&#xff0c;國產廠商也有著自己獨到的云方案。曙光Cloudview云計算操作系統采用新一代云計算中心的全新的管理模型&#xff0c;充分考慮云計算中心的資源分配、業務運行和運維服務等各種管理要素&#xff0c;實現云計算中心的軟硬件平臺資…

Centos 下面升級系統內核(轉)

1、導入public key 1rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org2、安裝ELRepo到CentOS 6.6中 1rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm3、安裝長期支持版本 1yum --enablerepoelrepo-kernel install kernel-lt -y4、編輯g…

Mantle--國外程序員最常用的iOS模型字典轉換框架

Mantle簡介 Mantle是iOS和Mac平臺下基于Objective-C編寫的一個簡單高效的模型層框架。 Mantle能做什么 Mantle可以輕松把JSON數據、字典&#xff08;Dictionary&#xff09;和模型&#xff08;即Objective對象&#xff09;之間的相互轉換&#xff0c;支持自定義映射&#xff0c…

C++ assert() 詳解

C assert 宏的應用方式將會在這篇文章中進行詳解 相信對此有興趣的朋友們應該可以根據我們介紹的內容充分掌握這方面的應用技巧。 作為一個經驗豐富的編程人員來說&#xff0c;對于C編程語言應該不會陌生的&#xff0c;實現它的應用可以幫助我們輕松的各種功能需求。 在這里我…

直連測速服務器異常,求證! 網件R7800, Speedtest測速的怪現象,200M寬帶+R7800者進...

本帖最后由 毛毛雨 于 2017-11-18 18:50 編輯寬帶是聯通FTTH 200M&#xff0c;標準千兆網線&#xff0c;千兆網卡。問題前的插曲&#xff1a;R7800剛到手&#xff0c;就迫不及待的換上了&#xff0c;結果&#xff0c;無論是路由器內置Speedtest冊數&#xff0c;還是電腦端的Spe…

iOS socket

為什么80%的碼農都做不了架構師&#xff1f;>>> #import "ViewController.h"interface ViewController ()<NSStreamDelegate,UITextFieldDelegate,UITableViewDataSource,UITableViewDelegate>{NSInputStream *_inputStream;//對應輸入流NSOutputS…

PHP配置,php.ini以及覆蓋問題

在部署一個cms項目到服務器上的時候&#xff0c;因為cms的模板比較老&#xff0c;服務器上用的php是5.3.3版&#xff08;大于5.3&#xff0c;可以認為是新的&#xff09;&#xff0c;有些頁面會顯示“deprecated”類別的錯誤信息。安全起見要抑制頁面中的錯誤信息輸出&#xff…

C/C++宏的使用總結

宏替換是C/C系列語言的技術特色&#xff0c;C/C語言提供了強大的宏替換功能&#xff0c;源代碼在進入編譯器之前&#xff0c;要先經過一個稱為“預處理器”的模塊&#xff0c;這個模塊將宏根據編譯參數和實際編碼進行展開&#xff0c;展開后的代碼才正式進入編譯器&#xff0c;…