我的網誌清單

2013年12月2日 星期一

C++ DLL 設計架構

之前有研究過C++ DLL 這個部份 , 因為要寫一些底層的部份 , 然後把架構拆開

不過呢後來太久沒看有點忘了架構 , 今天有空把他整理起來 , 免得之後又忘了

==============================================================

因為要設計 DLL 架構時主要是先把介面拆出來 , 有了介面再來設計功能

所以會有一個介面 , 以及一個入口程式 ... 



#define CALL __stdcall

#ifdef  DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif


介面
//
class interface
{
public :
    virtual int CALL   ADD(int   value) = 0;
};


//產生 實體
extern "C"{  EXPORT HGE * CALL CreateDll(int ver); }


//實做
class Interface_Impl: public interface{
public:
    static Interface_Impl* _InterfaceCreate();
    virtual int CALL   ADD(int   value) ;
private:
    Interface_Impl();
};

//DLL 裡面會參考到的 物件 指
extern Interface_Impl* pObj;



//使用者用這個建立
interface* CALL CreateDll(int ver)
{
    return (interface*) Interface_Impl::_InterfaceCreate();
}

//實際傳回建立的物件
Interface_Impl* Interface_Impl::_InterfaceCreate()
{
    if (!pObj)pObj= new Interface_Impl();
    return pObj;
}
--------------------------------------------------------------------

實際上使用的方法如下

.h 檔我們還是要引用這個

class interface
{
public :
    virtual int CALL   ADD(int   value) = 0;
};

因為實作實我們是不讓客戶端知道我們實作了那一個

  interface*obj= 0;

    obj= CreateDll(100);
    printf("%i",obj->ADD(100));



沒有留言:

張貼留言