MFC常规DLL和扩展DLL比较编写
来源:互联网 发布:下载隐藏软件 编辑:程序博客网 时间:2024/05/21 13:58
一、DLL的不同类型
1、MFC扩展DLL
2、常规DLL
二、建立DLL
1、导出类
class _declspec(dllexport) CMyClass
{
}
如果创建的MFC扩展DLL,可以使用宏:AFX_EXT_CLASS:
class AFX_EXT_CLASS CMyClass
{
}
这样导出类的方法是最简单的,也可以采用.def文件导出,这里暂不详谈。
2、导出变量、常量、对象
要导出一个常量时必须使用关键字extern,否则会发生连接错误。
注意:如果客户程序识别这个类而且有自己的头文件,则只能导出一个类对象。如果在DLL中创建一个类,客户程序不使用头文件就无法识别这个类。
MyFunction()
{
}
3、导出函数
导出函数和导出变量/对象类似,只要把_declspec(dllexport)加到函数原型开始的位置:
_declspec(dllexport) int MyFunction(int);
如果是常规DLL,它将和C写的程序使用,声明方式如下:
extern "c" _declspec(dllexport) int MyFunction(int);
实现:
extern "c" _declspec(dllexport) int MyFunction(int x)
{
}
如果创建的是动态连接到MFC代码库DLL的常规DLL,则必须插入AFX_MANAGE_STATE作为导出函数的首行,因此定义如下:
extern "c" _declspec(dllexport) int MyFunction(int x)
{
}
有时候为了安全起见,在每个常规DLL里都加上,也不会有任何问题,只是在静态连接的时候这个宏无效而已。这是导出函数的方法,记住只有MFC扩展DLL才能让参数和返回值使用MFC的数据类型。
4、导出指针
导出指针的方式如下:
_declspec(dllexport) int *pint;
_declspec(dllexport) CMyClass object = new CMyClass;
如果声明的时候同时初始化了指针,就需要找到合适的地方类释放指针。在扩展DLL中有个函数DllMain()。(注意函数名中的两个l要是小写字母),可以在这个函数中处理指针:
# include "MyClass.h"
_declspec(dllexport) CMyClass *pobject = new CMyClass;
DllMain(HINSTANCE hInstance,DWORD dwReason,LPVOID lpReserved)
{
}
常规DLL有一个从CWinApp派生的类对象处理DLL的开和关,可以使用类向导添加InitInstance/ExitInstance函数。
int CMyDllApp::ExitInstance()
{
}
三、在客户程序中使用DLL
_declspec(dllimport) int MyFunction(int);
_declspec(dllimport) int MyInt;
_declspec(dllimport) CMyClass object;
extern "C" _declspec(dllimport) int MyFunction(int);
在有的时候为了导入类,要把相应类的头文件添加到客户程序中,不同的是要修改类声明的标志:
class _declspec(dllimport) CMyClass,如果创建的是扩展DLL,两个位置都是:
class AFX_EXT_CLASS CMyClass。
- MFC常规DLL和扩展DLL比较编写
- 常规DLL和MFC扩展DLL(转载)
- 常规DLL和MFC扩展DLL(转载)
- 常规DLL和MFC扩展DLL(转载)
- 4、常规DLL和扩展DLL
- MFC扩展DLL与常规DLL的区别
- 编写常规DLL
- 编写常规DLL
- MFC 常规DLL导出和使用
- 三种DLL(Win32DLL,MFC常规DLL和MFC拓展DLL)的简单学习总结
- 三种DLL(Win32DLL,MFC常规DLL和MFC拓展DLL)的简单学习总结
- 三种DLL(Win32DLL,MFC常规DLL和MFC拓展DLL)的简单学习总结
- 三种DLL(Win32DLL,MFC常规DLL和MFC拓展DLL)的简单学习总结
- MFC 常规DLL 的创建
- MFC--Extension DLL(扩展DLL)
- MFC--Extension DLL(扩展DLL)
- Win32DLL,MFC常规DLL和MFC拓展DLL 的简单学习总结
- MFC DLL-----扩展的和正规的
- 内存相关
- sql server锁机制
- Ramp Up
- 对照Jingle的XMPP stanza理解Libjingle的几个关键数据结构
- Map迭代 方式
- MFC常规DLL和扩展DLL比较编写
- 一个基于NIO的下载队列实现
- 如何在命令行下调试Django的查询语句
- UIApplication对象及其代理UIApplicationDelegate
- Lucene.Net2.9(中科院分词.net 版) DEMO
- 《设计模式 ● 观察者》之业务场景
- 七款开源ERP评估比较
- Quartz 2D编程指南(1) - 概览
- html5标签参考手册