1 首先建立Dll
dll有三種 分別如下:
1 Non-MFC DLL:指的是不用MFC的類庫結構,直接用C語言寫的DLL,其輸出的函數一
般用的是標準C接口,並能被非MFC或MFC編寫的應用程序所調用。
2 Regular DLL:和下述的Extension Dlls一樣,是用MFC類庫編寫的。明顯的特點是
在源文件裏有一個繼承CWinApp的類。其又可細分成靜態連接到MFC和動態連接到MFC上
的,但靜態連接到MFC的動態連接庫只被VC的專業般和企業版所支持。
3 Extension DLL:用來實現從MFC所繼承下來的類的重新利用,也就是說,用這種類
型的動態連接庫,可以用來輸出一個從MFC所繼承下來的類。Extension DLL使用MFC的
動態連接版本所創建的,並且它只被用MFC類庫所編寫的應用程序所調用。
因爲有MFC提供支持,所以編寫第二程和第三程的Dll更簡便,可把Dll當成是一個應用程序來使用,以下兩種均以提供了CWinApp的繼承類。
(1)俗稱的共享數據段即可以用類定義public的變量,MFC真的是很方便,但是對於入口處理還不知道如何,這可要研究下MFC源碼才能知道,我也是菜鳥,知道的請糾正下,呵。
(2)輸出函數 一般定義爲類的protected 在輸出函數前加上extern "C" _declspec(dllexport) 即代表輸出函數
很簡單吧,就是這麼簡單。自己做做吧!!
(3)這Dll重要就是在於輸出接口吧,有輸出了,可到下一步調用了,我說說C++調用Dll的方法吧,可能還有其它,但我只會這一種。 以下假如是做好了一個叫Easy.dll的文件。
[1]先用到HINSTANCE ht=LoadLibrary("Easy.dll") //Easy.dll是在當前文件夾下 就是把Dll加載進來
[2]接着就是找到該模塊的模塊句柄 HMODULE hm=GetModuleHandle(_T("MyRegularDll"));
[3]用GetProcAddress(hm,"輸出函數名")來獲得函數地址 這函數就是返回指向模塊的函數指針,要怎麼用呢,當然要知道接口了,就是說這個函數是怎麼定義的比如Easy.dll裏有個這樣的輸出函數定義:
extern "C" _declspec(dllexport) void startHook(); 那麼就要跟着這接口定義一個這樣的函數指針,定義如下:
typedef void (WINAPI * 函數指針名)() 其實就是和函數定義一樣,只是函數名用(WINAPI * 函數指針)代替了
[4]全定義好了,下面就可以用了。 如:
typedef void (WINAPI * STARTHOOK)();
STARTHOOK startH=GetProcAddress(hm,"startHook");
startH(); //這就是調用函數 很簡單吧。。 不會看不懂吧!!