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
正如“1.3定義類的匯出屬性”中介紹的,由於在MFC程式中沒有定義MY_DLL_API,此時MY_DLL_API的值是_declspec(dllimport),即說明Circle類是匯出類。
2.2 實現功能
為介面中3個編輯框控制元件新增變數,類別設定成“Value”,變數型別設定成“float”,變數名分別為m_radius、m_girth和m_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*/
{
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()函式則會報錯。