Dll 使用篇

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();  //這就是調用函數    很簡單吧。。 不會看不懂吧!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章