由於專案的需要將自己實現的演算法類封裝為dll介面,供別人的呼叫,學習了一下類的封裝,記錄一下也便以後的檢視。
在vs2015中建立一下dll專案,例如exampldll
新增標頭檔案為example.h,裡面定義了dll的介面,可以供別人使用。如下.h檔案
在addnumbe.cpp裡實現來的函式,在前面定義#define example#ifdef exampleibdll
#define exampleapi _declspec(dllexport)
#else
#define exampleapi _declspec(dllimport)
#endif
//可以include需要用到的標頭檔案
// 例如
#include class exampleapi addnumber
;
生成(build)工程,在debug或者x64資料夾中會生成相應的dll及lib檔案(具體位置看自己的用的編譯平台):example.dll example.lib#define examplelibdll
#include //標頭檔案中函式的實現
addnumber::addnumber()
addnumber::~addnumber()
呼叫方法1)
呼叫需要各個dll的.h、.dll、.lib檔案。
1.將標頭檔案新增到工程中,並#include到需要用的地方。將lib檔案拷貝到專案中,並在 properties->linker->input-> additional dependecies 中寫入:exampledll.lib;exampledll.lib。
2.或者在程式中寫入:
呼叫方法2(推薦使用))#pragma comment(lib,"example1.lib")
#pragma comment(lib,"example2.lib")
在方法一中,你每次建立乙個工程都需要把example.dll,example.lib,example.h三個檔案拷貝到工程裡面去,事實上這只發揮了dll對類的**保護的功能,並沒有多大的減輕程式設計人員的工作量,下面的方法可以減少程式設計人員的工作量,具體步驟:
1:將example.dll扔到windows/system32下
2:將.examplelib扔到vc的lib目錄裡
3:將方法一中的example.h扔到vc的include目錄裡
4:同方法一的最後一步。
以後你就可以像使用opengl的glut、glui等庫一樣使用你自己封裝的乙個經常復用的類了。
/ 下列 ifdef 塊是建立使從 dll 匯出更簡單的
// 巨集的標準方法。此 dll 中的所有檔案都是用命令列上定義的 dlltest_exports
// 符號編譯的。在使用此 dll 的
// 任何其他專案上不應定義此符號。這樣,原始檔中包含此檔案的任何其他專案都會將
// dlltest_api 函式視為是從 dll 匯入的,而此 dll 則將用此巨集定義的
// 符號視為是被匯出的。
#ifdef dlltest_exports
#define dlltest_api __declspec(dllexport)
#else
#define dlltest_api __declspec(dllimport)
#endif
// 此類是從 dlltest.dll 匯出的
class dlltest_api cdlltest ;
extern dlltest_api int ndlltest;
dlltest_api int fndlltest(void);
// dlltest.cpp : 定義 dll 應用程式的匯出函式。
//#define dlltest_exports
#include "stdafx.h"
#include "dlltest.h"
// 這是匯出變數的乙個示例
dlltest_api int ndlltest=0;
// 這是匯出函式的乙個示例。
dlltest_api int fndlltest(void)
// 這是已匯出類的建構函式。
// 有關類定義的資訊,請參閱 dlltest.h
cdlltest::cdlltest()
C 類的封裝
1 private,public,protected的訪問範圍 private 只能由該類中的函式 其友元函式訪問,不能被任何其他訪問,該類的物件也不能訪問.protected 可以被該類中的函式 子類的函式 以及其友元函式訪問,但不能被該類的物件訪問 public 可以被該類中的函式 子類的函式 ...
c 類和類的封裝
1.類和類成員 c 提供了如char int long float double等基本資料型別,足夠用來解決大多數哦相對簡單的問題,但對於複雜的問題就比較困難了。c 的乙個實用特性是自定義資料型別 如之前的列舉和結構體 struct goods struct 類中預設訪問限定符是公有的,oop類中預...
c 中類的封裝
連線directshow filter cvideo 類中,這樣程式簡潔明瞭,易於操作,不容易出錯,提高了程式的魯棒性。1.類的定義 類是定義同一類所有物件的變數和方法的藍圖或原型。例如,可以建立乙個定義包含當前檔位等例項變數的自行車類。這個類也定義和提供了例項方法 變檔 剎車 的實現。例項變數的值...