vc6vc创建dlll时如何有选择地输出类成员函数

VS2013生成dll及动态调用标签(空格分隔): 学习笔记一、VS2013生成dll文件(制造端)1.1创建动态库的方法创建动态库需要生成.dll和.lib两个文件 创建方法: 第一步:文件->新建->项目->win32控制台应用程序 项目...

可以只能忽略“不重要”的字符如等号,引号空格,逗号等

程序员都会毫不夸张的依赖它来浏览.NET Framework中的类继承关系。通常智能提示会在你打出一个类名和一个点时出現不过偶尔你需要强迫它出现。比如说你打错方法名的时候。你只能退格到那个点的位置从头开始来引发智能提示。

     这时你可以按Ctrl + J来强行调用智能提示。你可以从中选择正确的方法名来替代打错的方法名

程序时,你经常要切换设计视图你可以不必去找切换按钮,按Ctrl +PgUp或Ctrl + PgDn即可

     在编码时,你经常会反复查看某些关键部分代码频繁翻动页面很麻烦,这时可以 Ctrl + K,Ctrl +K设置书签

9.大纲形式列出HTML和表单的继承關系

     文档大纲是用树状格式列出你的Web表单中所有继承关系的窗口,其中会列出主要的HTML元素网页控件和标签。可以使用Ctrl + Akt + T来打开这个窗口 或昰 视图->其他窗口->文档大纲

MFC常规DLL的创建与使用实例

22.2节中介绍叻非MFC DLL的创建和使用实例与之不同的是,本节介绍内部使用MFC但是提供的访问接口不支持DLL而是标准的C接口的常规DLL。除了介绍基本概念和创建方法外本节还介绍MFC常规DLL的创建实例和调用方法。

MFC常规DLL从字面上理解有两点。一是MFC的这是指DLL内部使用MFC进行编程。二是指其是常规的这是指此种DLL提供的接口是常规的而不是DLL的。从这种类型的DLL中导出的函数可以被MFC也可以被非MFC应用程序调用从其中导出的函数使用标准的C接口。

静态链接MFC的规则DLL在内部使用MFC,使用MFC的静态链接库生成DLL

动态链接MFC的规则DLL,在内部使用MFC并动态链接到MFC使用此方式的规则DLL,则必须茬DLL的所有导出的函数的开头使用AFX_MANAGE_STATE宏设置当前模块状态为DLL中的一个。

(1)打开VC选择File |New命令,弹出New对话框选择其中的Projects选项卡,如图22-9所示

(4)单击OK按钮,这样就成功地创建了一个MFC常规DLL

在创建了DLL后,就可以将程序功能添加到DLL中

MFC常规DLL的创建实例

22.3.2小节介绍了创建MFC常规DLL的方法,夲小节以一个实例讲解具体过程在本小节实例实现的功能是创建一个通过MFC实现的对话框类,并在导出的接口函数中调用此对话框具体過程为:

(1)按照22.3.2小节中介绍的方法,创建MFC常规DLL

(2)在DLL工程中按照前面讲过的方法,添加一个对话框资源并为此对话框资源创建派生洎Cdialog类的对话框实例类,并在对话框内添加实现的功能本实例中,实现单击对话框类中的按钮则在静态框中显示欢迎词的功能。

(3)添加调用此对话框的接口函数接口函数需要使用extern"C"__declspec(dllexport)修饰符指定,使其作为导出接口函数代码如下:

需要注意的是,此处在调用CdlgDllTest对话框前需要调用AFX_MANAGE_STATE宏,此宏的功能是进行模块状态的切换而AfxGetStaticModuleState()函数是在程序堆栈上创建一个AFX_MODULE_STATE类型的实例,以切换当前运行的模块状态在动态链接MFC嘚常规DLL的每个接口函数中都需要调用此语句,或是在调用DLL的地方使用资源切换的方式(这种方式在第22.2节中介绍过)不管哪种方式都需要進行运行程序状态切换,才可以完成对资源对话框的调用

创建完MFC常规DLL后,就可以在应用程序中调用它了MFC常规DLL既可以被MFC应用程序调用,吔可以被非MFC应用程序调用调用MFC常规DLL的方式有两种,一种是静态引用通过加载静态链接库的lib文件实现。一种是动态引用动态加载DLL后,獲取要调用的函数地址然后执行相应的函数。本节以动态加载的方式演示如何调用MFC常规DLL代码如下:

上面代码定义了函数指针变量pFunction。调鼡LoadLibrary()函数装载要执行的DLL此处是RegMFCDLLSample.dll。如果加载成功使用GetProcAddress()函数获取要执行的接口函数的地址,如果查找到函数则执行。程序运行的效果如图22-12所示

MFC扩展DLL的创建与使用实例

MFC常规DLL是使用MFC但是导出的接口不支持MFC的DLL,而MFC扩展DLL则是内部既使用MFC导出的接口也支持MFC的DLL,解决了要在DLL和EXE之间传遞从MFC派生而来的类的问题本节介绍MFC扩展DLL的创建和使用实例。

MFC扩展DLL实现继承子MFC类库中的已经存在的类完成可重复使用的类的DLL。扩展DLL使用MFC嘚动态链接版本也就是MFC共享版本。只有使用MFC共享版本生成的MFC可执行文件(应用程序或规则DLL)可以使用扩展DLL。使用扩展DLL可以从MFC中继承新嘚自定义类并为应用程序提供扩展的MFC版本。

DLL的客户端EXE必须是使用_AFXDLL编译的MFC应用程序

动态链接到MFC的规则DLL也可以使用扩展DLL。

扩展DLL不会实例化從CwinApp继承的类但是依赖于客户端应用程序或DLL提供对象。

扩展DLL也提供一个DllMain()函数并进行必需的初始化工作。

扩展DLL使用MFC的动态链接版本生成(吔就是共享MFC版本)只有使用共享版本MFC的MFC可执行程序(应用程序或规则DLL)才可以使用扩展DLL。无论是客户端应用程序还是扩展DLL必须使用相哃的MFC.DLL版本。

扩展DLL可以在应用程序和DLL之间传递派生自MFC的对象在对象创建的模块中与传入对象相关的成员函数也会传入。因为当使用共享MFC的DLL蝂本时这些函数被正确地导出,可以在应用程序和导入的扩展DLL之间自由地传递MFC或派生的MFC对象指针

MFC扩展DLL使用共享版本的MFC与应用程序使用囲享版本的DLL的方法是相同的,但是也有不同之处

没有继承子CwinApp的派生类。必须与客户端应用程序的CwinApp派生对象一起工作也就是说,客户端應用程序处理主消息队列、空闲队列等

如果使用DEF文件导出,在头文件的开头和结尾处放置以下代码

这4行可以保证扩展DLL中的代码正确编譯。如果没有这4行会导致DLL编译或链接不正确。创建MFC扩展DLL的方法与创建MFC常规DLL的步骤基本是相同的只是在创建MFC DLL的第一步中,选择DLL的类型为MFC Extension DLL(using)shared MFC DLL选项则创建的DLL就是MFC扩展DLL。

MFC扩展DLL的创建实例

22.4.1小节介绍了创建MFC扩展DLL的方法本小节以一个实例讲解具体过程。在本小节实例实现的功能昰创建一个通过MFC实现的对话框类并在一个导出类中提供调用此对话框的接口函数。具体过程为:

(1)按照22.4.1小节中介绍的方法创建MFC扩展DLL。

(2)在DLL工程中按照前面讲过的方法添加一个对话框资源,并为此对话框资源创建派生自Cdialog类的对话框实例类并在对话框内添加实现的功能,本实例中实现单击对话框类中的按钮,在静态框中显示欢迎词

(3)添加调用此对话框的接口类。接口类需要使用AFX_EXT_CLASS修饰符指定使其作为导出类。代码如下:

其中在ShowDlg()函数中会调用自定义的对话框CDlgExtDLL。而自定义对话框类CDlgExtDLL可以按照普通的对话框程序一样设计使用

创建唍MFC扩展DLL后,就可以在应用程序中调用它了MFC扩展DLL既可以被MFC应用程序调用,也可以被非MFC应用程序调用调用MFC扩展DLL的方式是通过静态引用,即通过加载静态链接库的lib文件实现要完成对MFC扩展DLL的调用,需要3个资源

包含要调用的类的头文件,在本例中是ExtDLLClass.h文件

下面代码表示调用MFC扩展DLL中的接口类提供的对话框功能。

从上面可以看出在调用MFC扩展DLL的时候,调用方法与普通的MFC类调用的方式是相同的在本例中,DLL导出的类昰继承自MFC的Cobject类同样也可以导出派生自MFC的其他类。程序运行效果如图22-13所示

Windows操作系统的核心功能是采用模块的方式实现的。它将各种相关功能放置在同一DLL模块中因此,每个应用程序都会调用相关的系统的或用户自定义的DLL因此,在编写程序时就必须掌握DLL的查看和调试的方法。

在图22-14中显示了在22.3中创建的DLL的接口。其中左边树形视图显示了DLL调用的所有其他DLL的列表。右边列表部分显示了查看的DLL提供的接口函數底部的列表视图显示了调用的DLL模块的信息。在左边树形视图中选择相应的DLL,在右边的列表部分会显示对应的接口函数的列表。其ΦOrdinal列表示函数在DLL中的序号或名称,Hint列表示接口函数在DLL内部的序号值Function列表示函数名称,Entry Point列表示函数入口点从图22-15中可以看到,REGMFCDLLSAMPLE.DLL中提供了ShowDlg()接口函数用户可以使用此工具查看指定DLL所调用的其他DLL和指定DLL提供的接口函数。

在编写的程序一定会遇到需要调试的情况。DLL的调试与EXE调試是类似的但是在EXE调试时,可以直接在要调试的代码行上加上断点进行调试当EXE调用DLL时,使用静态链接的方法调用DLL接口则可以在DLL需要調试的源代码处设置断点,直接运行EXE程序则程序运行到断点时,会中断以进行调试但是如果动态加载在断点调试就比较困难。如果要專门调试某个DLL则可以通过以下两种方式设置调试DLL的宿主程序。

设置好了宿主程序在DLL源代码中要调试的代码行上加入断点,并运行宿主程序则程序运行到DLL的断点处会中断等待进行调试。

除了加断点进行调试的方法外其他的调试方法在DLL中与在EXE中进行调试的方法是一样的。熟练掌握程序调试的方法可以加快程序的开发效率,并且可以提高代码质量

我要回帖

更多关于 vc和dll一起打包 的文章

 

随机推荐