不過呢後來太久沒看有點忘了架構 , 今天有空把他整理起來 , 免得之後又忘了
==============================================================
因為要設計 DLL 架構時主要是先把介面拆出來 , 有了介面再來設計功能
所以會有一個介面 , 以及一個入口程式 ...
#define CALL __stdcall
#ifdef DLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif
#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;
}
{
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;
};
因為實作實我們是不讓客戶端知道我們實作了那一個
{
public :
virtual int CALL ADD(int value) = 0;
};
因為實作實我們是不讓客戶端知道我們實作了那一個
interface*obj= 0;
obj= CreateDll(100);
printf("%i",obj->ADD(100));
沒有留言:
張貼留言