#include "IMyDLL.h"
class CMyDLLImpl : public IMyDLL
{
virtual void Init();
}
//-----------------实现文件 MyDLLImpl.cpp --------
#include "MyDLLImpl.h"
void CMyDLLImpl::Init()
{
; //真正实现的代码
}
现在剩下的事情就是写DLL文件了
//-------------DLL文件 MyDLL.h ---------------
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
MYDLL_API void * CreateIMyDLL();
//------------DLL文件 MyDLL.cpp --------------
#include "MyDLL.h"
#include "MyDLLImpl.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
MYDLL_API void * CreateIMyDLL()
{
CMyDLLImpl * pMyDLLImpl = new CMyDLLImpl();
return static_cast <void *> (pMyDLLImpl);
}
这样基本上就写完了。调用端使用的时候只要DLL的头文件(MyDLL.h),库文件和接口文件(IMyDLL.h)
为什么要使用接口写DLL,一个原因也就是MSDN说的在某些时候如果你给调用端一个类的头文件,可能这个头文件需要include很多其他的文件,对调用端并不合适。
我自己也碰到过类似的问题,调用端不能编译,后来改成接口文件就好了。
使用接口文件,就没有其他的什么文件。另外一个原因就是接口设计自身的好处了,这里就不说了。
class CMyDLLImpl : public IMyDLL
{
virtual void Init();
}
//-----------------实现文件 MyDLLImpl.cpp --------
#include "MyDLLImpl.h"
void CMyDLLImpl::Init()
{
; //真正实现的代码
}
现在剩下的事情就是写DLL文件了
//-------------DLL文件 MyDLL.h ---------------
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif
MYDLL_API void * CreateIMyDLL();
//------------DLL文件 MyDLL.cpp --------------
#include "MyDLL.h"
#include "MyDLLImpl.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
MYDLL_API void * CreateIMyDLL()
{
CMyDLLImpl * pMyDLLImpl = new CMyDLLImpl();
return static_cast <void *> (pMyDLLImpl);
}
这样基本上就写完了。调用端使用的时候只要DLL的头文件(MyDLL.h),库文件和接口文件(IMyDLL.h)
为什么要使用接口写DLL,一个原因也就是MSDN说的在某些时候如果你给调用端一个类的头文件,可能这个头文件需要include很多其他的文件,对调用端并不合适。
我自己也碰到过类似的问题,调用端不能编译,后来改成接口文件就好了。
使用接口文件,就没有其他的什么文件。另外一个原因就是接口设计自身的好处了,这里就不说了。