C++ dll,c++写dll库
a、非MFCDLL:指没有MFC的类库结构,直接用C语言编写的DLL。它的输出函数一般使用标准的C接口,可以被非MFC或MFC编写的应用程序调用。
B.RegularDLL:和下面的ExtensionDlls一样,是用MFC类库写的。明显的特点是源文件中有一个继承CWinApp的类。可以细分为静态连接MFC和动态连接MFC。
静态连接MFC动态连接库只有专业版和企业版的VC支持。这个类似DLL的应用程序中的输出函数可以被任何Win32程序使用,包括使用MFC的应用程序。输入函数具有以下形式:
extern c exportyourrexportedfunction();
没有extern“C”修饰,输出函数只能从C代码调用。
DLL应用程序是从CWinApp派生的,但是没有消息循环。
动态链接到MFC的常规DLL应用程序中的输出函数可由任何Win32程序使用,包括使用MFC的应用程序。但是,DLL的所有函数输出都应该以下面的语句开始:
AFX _ MANAGE _ STATE(AfxGetStaticModuleState())
该语句用于正确切换MFC模块状态。
用支持DLL技术的所有语言编写的应用程序都可以调用RegularDLL。在这个动态链接库中,它必须有一个继承自CWinApp的类,而DllMain函数是MFC提供的,所以不需要显式编写。
c,ExtensionDLL:用来实现继承自MFC的类的重用,也就是说,这种类型的动态连接库可以用来输出一个继承自MFC的类。它的输出函数只能由使用MFC并动态链接到MFC的应用程序使用。你可以从MFC中继承你想要的更适合自己使用的类,提供给你的应用。你也可以随意提供MFC或MFC继承类对象指针给你的应用程序。ExtensionDLL是使用MFC的动态连接版本创建的,它只被用MFC类库编写的应用程序调用。与RegularDLLs不同,ExtensionDLLs没有从CWinApp继承的类对象,所以必须为DllMain函数添加初始化代码和结束代码。
与常规dll相比,有以下不同之处:
1.它没有从CWinApp派生的对象;
2.它必须有一个DllMain函数;
3.DllMain调用AfxInitExtensionModule函数,必须检查该函数的返回值。如果它返回0,DLLMAIN也返回0;
4.如果它想要输出CRuntimeClass类型的对象或资源,它需要提供一个初始化函数来创建一个CDynLinkLibrary对象。而且,需要输出初始化函数;
5.使用扩展DLL的MFC应用程序必须有一个从CWinApp派生的类。而且一般扩展DLL的初始化函数都是在InitInstance中调用的。
参考:http://bbs.csdn.net/topics/80315152
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。