我自己寫了一個(gè)dll調(diào)用接口的類. 不過(guò)比較簡(jiǎn)單, 不知道值不值得說(shuō).
typedef void* (*_ObjectCreater)();
typedef void (*_ObjectDestroyer)(void*);
template <typename _OBJ>
class clClassModule
{
private:
HMODULE m_hModule;
_OBJ* m_pObject;
_ObjectCreater m_objCreater;
_ObjectDestroyer m_objDestroyer;
public:
clClassModule(std::string strDllFile);
~clClassModule();
_OBJ* inst();
};
#ifndef USE_DLL_OBJECT
#define USE_DLL_OBJECT extern "C" DLL_EXP void* ObjectCreater();\
extern "C" DLL_EXP void ObjectDestroyer(void*);
#endif//USE_DLL_OBJECT
#ifndef DLL_OBJECT
#define DLL_OBJECT(OBJECT) void* ObjectCreater(){ return new OBJECT; }\
void ObjectDestroyer(void* _obj){ OBJECT* pObj = (OBJECT*)_obj; delete pObj; }
#endif//DLL_OBJECT
//這里把實(shí)現(xiàn)暫時(shí)忽略
使用方法非常簡(jiǎn)單,
在dll中定義一個(gè)類A, 然后使用DLL_OBJECT(A);就可以了.
在調(diào)用dll的代碼中USE_DLL_OBJECT;, 然后就可以使用clClassModule<A>建立dll的實(shí)例. 使用clClassModule<A>::inst();導(dǎo)出A的類.
比如:
clClassModule<A> cm;
A* a = cm.inst();
就可以使用a的接口了(類A). 不過(guò)A這個(gè)類在dll中應(yīng)該是一個(gè)虛基類, 原理我就不提了, 看看COM的實(shí)現(xiàn)就明白的.
不知道這樣算不算一種調(diào)用dll的方式?
回復(fù) 更多評(píng)論