c++中dll的种类用法分析
a、Non-MFC DLL:指的是不用MFC的类库结构,直接用C语言写的DLL,其输出的函数一般用的是标准C接口,并能被非MFC或MFC编写的应用程序所调用。
b、Regular DLL:和下述的Extension Dlls一样,是用MFC类库编写的。明显的特点是在源文件里有一个继承CWinApp的类。其又可细分成静态连接到MFC和动态连接到MFC上的。
静态连接到MFC的动态连接库只被VC的专业般和企业版所支持。该类DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用MFC的应用程序。输入函数有如下形式:
extern "C" EXPORT YourExportedFunction( );
如果没有extern “C”修饰,输出函数仅仅能从C++代码中调用。
DLL应用程序从CWinApp派生,但没有消息循环。
动态链接到MFC的规则DLL应用程序里头的输出函数可以被任意Win32程序使用,包括使用MFC的应用程序。但是,所有从DLL输出的函数应该以如下语句开始:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
此语句用来正确地切换MFC模块状态。
Regular DLL能够被所有支持DLL技术的语言所编写的应用程序所调用。在这种动态连接库中,它必须有一个从CWinApp继承下来的类,DllMain函数被MFC所提供,不用自己显式的写出来。
c、Extension DLL:用来实现从MFC所继承下来的类的重新利用,也就是说,用这种类型的动态连接库,可以用来输出一个从MFC所继承下来的类。它输出的函数仅可以被使用MFC且动态链接到MFC的应用程序使用。可以从MFC继承你所想要的、更适于你自己用的类,并把它提供给你的应用程序。你也可随意的给你的应用程序提供MFC或MFC继承类的对象指针。Extension DLL使用MFC的动态连接版本所创建的,并且它只被用MFC类库所编写的应用程序所调用。Extension DLLs 和Regular DLLs不一样,它没有一个从CWinApp继承而来的类的对象,所以,你必须为自己DllMain函数添加初始化代码和结束代码。
和规则DLL相比,有以下不同:
1、它没有一个从CWinApp派生的对象;
2、它必须有一个DllMain函数;
3、DllMain调用AfxInitExtensionModule函数,必须检查该函数的返回值,如果返回0,DllMmain也返回0;
4、如果它希望输出CRuntimeClass类型的对象或者资源(Resources),则需要提供一个初始化函数来创建一个CDynLinkLibrary对象。并且,有必要把初始化函数输出;
5、使用扩展DLL的MFC应用程序必须有一个从CWinApp派生的类,而且,一般在InitInstance里调用扩展DLL的初始化函数。
参考:http://bbs.csdn.net/topics/80315152
C++ Json工具--Jsoncpp用法简介 Json简介 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,可读性强,易扩展,很适合做通信协议,下面主要介绍一款C++的Json库:Jsoncpp.
【重学C/C++系列(二)】:extern关键字用法全解析 extern 是C/C++语言中**表明全局变量或者函数作用范围(可见性)的关键字**,编译器收到extern通知,则其声明的变量或者函数可以在本模块或者其他模块使用。
<c++> &引用概念 | 引用用法 | 引用与指针区别 什么是引用?引用是已定义的变量的别名(另一个名称)。通俗来讲,就相当于起一个外号。引用语法是什么样的?语法:数据类型& 引用名 = 引用实体;举个例子:如果我们要将a作为bint a;&不是地址运算符,而是类型标识符。它是放在数据类型后面的。
C++中rand随机数的用法 C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)
相关文章
- 【C++保姆级入门】一维数组基础详解+习题巩固
- 【神经网络与深度学习】【C/C++】ZLIB学习
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
- 【C++】宇宙最强知识点总结
- C++-map:获取map中value最大值、最小值对应的键值对
- C++ 中的异常机制分析
- C++ 中数组做参数的分析
- 今日头条校园招聘历年经典面试题汇总:C++研发岗
- 新秀系列C/C++经典问题(六)
- C++ 堆 和 堆 分析
- c++计算程序时间
- C++中结构体与类的区别 1
- 《Windows via C/C++》学习笔记 —— 内核对象的“线程同步”之“等待定时器”
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ⑤ ( tasks.json 中的 args 数组配置分析 | 编译并执行 C++ 程序 )
- 【开发环境】Ubuntu 中使用 VSCode 开发 C/C++ ④ ( 创建 tasks.json 编译器构建配置文件 | tasks.json 编译器构建配置文件分析 )
- C++智能指针如何指向数组
- C++字符集问题终极分析(可解决乱码问题)
- 31.C++-虚函数之构造函数与析构函数分析
- 20.C++- "&&","||"逻辑重载操作符的缺陷、","逗号重载操作符的分析
- (转)java 层调用Jni(Ndk) 持久化c c++ 对象
- 如何分析和提高(C/C++)程序的编译速度?
- linux下练习 c++ 容器的vector的特性