经验分享,如何写DLL
来源:互联网 发布:白金数据结局神乐和龙 编辑:程序博客网 时间:2024/05/21 10:08
DLL一般有2种写法。
第一种用MS.NET的向导帮助就能生产一个DLL,很简单。也就是有个类的头文件,写好DLL后把DLL和头文件给调用端一起使用。
第二种是写一个接口文件。
在这里,我介绍一下通过接口文件写DLL。接口文件主要就是用到纯虚类。(我以前明白什么是纯虚类,但就是不知道怎么用。也看过关于接口的介绍,但没有看到实际的例子)
MSDN关于DLL也提到一句话,就是通过接口来写,但具体怎么写就没说了。
我们需要一个接口文件(h文件),一个实现接口的类的文件(h和cpp文件或者只有h文件)
接口文件名一般用“I”开头,实现接口的类的文件一般用Impl结尾。例如:
//---------------------接口文件 IMyDLL.h ------
struct IMyDLL
{
virtual void Init() = 0;
}
//-------------------实现文件 MyDLLImpl.h --------
//继承IMyDLL
#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很多其他的文件,对调用端并不合适。
我自己也碰到过类似的问题,调用端不能编译,后来改成接口文件就好了。
使用接口文件,就没有其他的什么文件。另外一个原因就是接口设计自身的好处了,这里就不说了。
- 经验分享,如何写DLL
- 转帖(经验分享,如何写DLL )
- 经验分享,如何写线程
- 如何写DLL
- DELPHI调用VC写的DLL经验
- 如何写DLL(C++)
- 经验分享:如何迅速成为Java高手
- 经验分享:如何迅速成为Java高手
- 经验分享:如何迅速成为Java高手
- [经验分享]Google如何测试软件
- 老李玩微博经验分享之如何发微博
- Wordpress如何完整搬家的经验分享
- 经验分享 | 如何搭建企业管理驾驶舱
- 经验分享,如何扩展XFS文件系统 !
- 分享下我写评测的经验吧
- LaTeX实战经验:如何写算法
- Delphi如何调用C++写的DLL
- Delphi如何调用C++写的DLL
- 子程序和库
- 海量数据库解决方案
- GCC-3.4.6源代码学习笔记(119)
- Studying note of GCC-3.4.6 source (119)
- 不要老拿隐私和免费说事
- 经验分享,如何写DLL
- win7 硬盘安装fedora12
- 绕了一点路
- 淡淡微风,轻轻音乐
- Ubuntu Linux系统访问Windows文件
- 抽象方法能否同时是native或者static或synchronized的?
- 寻找信心
- [劈]道德上支持腾讯!情感上支持奇虎!行动上全部抵制!
- 小酌独饮对月吟