1. 程式人生 > >VS2015動態庫程式設計之匯出C++類(下)

VS2015動態庫程式設計之匯出C++類(下)

文章相關視訊下載地址http://pan.baidu.com/s/1eSpHjt4

2 呼叫DLL程式的編寫

建立一個基於對話方塊的MFC程式,在該程式的介面中,輸入圓的半徑後,可以獲取該圓的周長和麵積,其介面結構為圖4所示。

 

4 程式介面

2.1 呼叫DLL

設定MFC程式的“附加庫目錄”和“附加依賴項”,並且將Win32_DLL_Class_Test.dll檔案拷貝到MFC程式原始碼所在的目錄下。之後,將動態庫Win32_DLL_Class_Test專案的Circle.h標頭檔案拷貝到MFC程式原始碼所在的目錄下,並且將其匯入到MFC程式中。在MFC程式的原始碼中包含該標頭檔案

#include

 "circle.h"

正如1.3定義類的匯出屬性”中介紹的,由於在MFC程式中沒有定義MY_DLL_API,此時MY_DLL_API的值是_declspec(dllimport),即說明Circle類是匯出類。

2.2 實現功能

為介面中3個編輯框控制元件新增變數,類別設定成“Value”,變數型別設定成“float”,變數名分別為m_radiusm_girthm_area如圖5所示。

 

5 為編輯框新增變數

“計算”按鍵新增響應函式,在該響應函式中,獲取輸入的半徑,之後定義Circle類的物件cc,並且通過該物件呼叫Circle類的GetGirth()函式和GetArea()

函式得到圓的周長和麵積,並且在響應的編輯框中顯示。

UpdateData(TRUE);

circle cc;

cc.SetRadius(m_radius);

m_girth = cc.GetGirth();

m_area = cc.GetArea();

UpdateData(FALSE);

3 類的部分匯出

之前提到到了Circle類為全部匯出,即類中的所有成員均為匯出屬性。也可以通過Circle.h標頭檔案將Circle類的部分成員設定為匯出屬性。

首先在Circle.h中將circle類前的MY_DLL_API註釋掉,接下來在部分成員前加入MY_DLL_API修飾符:

class /*MY_DLL_API*/

 circle

{

public:

MY_DLL_API circle();

public:

MY_DLL_API void SetRadius(float r);

MY_DLL_API float GetGirth();

float GetArea();

private:

float m_radius;

};

以上程式碼將Circle類的SetRadius()函式和GetGirth()函式設定為了匯出,而GetArea()函式並沒有設定為匯出。此時,在MFC程式中,如果呼叫Circle類的GetArea()函式則會報錯。