您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 2_UG二次开发应用框架
第2章二次开发应用框架2.1二次开发工程项目的创建二次开发工程的创建常用有3种:UG/OpenAppWizard、Win32应用程序向导和MFC应用程序向导。UG应用开发程序采用了动态链接库(DLL,DynamicLinkLibrary)技术,使用上述任何一种应用向导开发程序,最终生成的结果都是DLL文件,提供UG进程加载。UG内部应用程序开发规定以动态链接库方式对其进行功能扩展和应用开发。动态链接库被映射到其他应用程序空间中执行,与链接它的应用程序可以看成是一体的。在VisualStudio.net中将应用程序编译链接生成动态链接库文件(后缀名为.dll),UG启动时会自动加载动态链接库文件供用户调用,从而实现了应用开发程序与UG平台的无缝集成。1、利用UG/OpenAppWizard向导1.4节已经详细介绍了使用UG/OpenAPPwizard创建一个简单的FirstProject程序。该向导是UG软件本身提供的应用向导,随着UG版本和开发环境的升级而升级。该向导操作简便,运行稳定,可以快速构建开发体系,但通常不支持MFC类库,因此常常应用于辅助工具的开发。2、利用Win32应用程序向导(DLL)应用开发程序框架还可以采用Win32DLL向导创建。Win32DLL向导创建Windows常规DLL,它只能导出C样式函数,不能导出C++类、成员函数和重载函数,同UG/OpenAppWizard向导创建工程项目一样不支持MFC。利用Win32应用程序向导创建工程项目,包括两个步骤:新建项目和设置项目属性。步骤一:新建项目打开VisualStudio.NET,选择新建项目菜单项,将显示如图2-5所示的新建项目对话框。在项目类型框中选择VisualC++项目下的Win32选项,在模板框中选择Win32项目选项,在名称框中输入项目名称,在位置框中设置合适的路径,单击确定按钮接受输入。图2-5新建项目对话框这时将显示如图2-6所示的Win32应用程序向导-UFSolution对话框,选择应用程序设置属性页,在其中选择Dll,直接单击完成按钮建立新项目。图2-6Win32应用程序向导-UFSolution对话框新建的项目中将会有一些向导默认添加的文件,如图2-7所示。图中列出了新建项目中已有的文件。图2-7解决方案资源管理器图步骤二:设置项目属性选择项目菜单下的属性项,将显示如图2-8所示的UFSolution属性页。图2-8项目属性页-常规在图2-8中要确认项目默认值框中配置类型为动态库(.dll),然后,选择调试选项,将显示图2-9。在图2-9中,将操作框中的命令项设置为系统中的UG执行文件,即ugraf.exe,设置这一项的目的是为了便于程序的调试。图2-9项目属性页-调试接下来,选择C/C++项中的常规选项,将附加包含目录设置为$UGII_BASE_DIR\UGOPENPP;$UGII_BASE_DIR\UGOPEN,如图2-10所示。设置这一项的目的是为了包含UF的一些头文件。图2-10项目属性页-C/C++-常规选择C/C++项中的代码生成选项,将运行库设置为多线程调试DLL(/MDd),如图2-11所示。图2-11项目属性页-C/C++-代码生成选择链接器项中的常规选项,设置输出文件,将附加库目录设置为$UGII_BASE_DIR\UGOPEN;$UGII_BASE_DIR\UGOPENPP,如图2-12所示。图2-12项目属性页-链接器-常规选择链接器项中的输入选项,设置附加依赖项为libufun.liblibugopenint.lib。这两个文件是在进行UG二次开发时必需的库载入文件,如图2-13所示。图2-13项目属性页-链接器-输入设置好以上选项后,按应用按钮,将所设置的属性应用于项目。(3)利用MFC应用程序向导(DLL)UG应用程序项目也可以利用MFC应用程序向导(DLL)创建。UG应用程序开发可以方便地调用MFC类库中的资源,丰富应用程序界面。项目创建过程与Win32应用程序向导(DLL)项目创建过程基本相同。同流行的windows应用程序开发工具相比,UG/Open提供的工具及对话框所包含的控件较少,功能有限,因此界面开发在一定程度上受到限制,有的功能甚至难以实现。为了避免这个缺陷,可以采用MFC应用向导(MFCAppwizard)建立系统框架,在该框架下可以方便地调用MFC类库中的资源。MFC(MicrosoftFoundationClass)类库是Windows下C++编程使用最广泛的类库。MFC封装了WIN32API函数,并设计了一套方便的消息映射机制。VisualC++及其MFC的界面灵活性和表达能力均优于UIstyler的功能。有效灵活的MFC框架结构大大方便了开发者的编程工作,达到事半功倍的效果。在UG开发中使用MFC库,一般调用的是MFC42.DLL库(MFC核心类库)。由于不能保证用户机器都安装了MFC类库,所以在编译时应静态链接到MFC库,此时DLL文件包含所有需要的MFC代码的一份拷贝,即成为自包含的库。与动态链接到MFC方式相比,静态方式创建的DLL文件占用了更多空间,但确保了DLL在不同目标机器上的正确运行。当UG执行用户的开发程序时会把MFC42.DLL作为进程的一部分装入。MFC42.DLL把数据存放在一些可靠的全局变量内。由于在正规的MFCDLL中调用MFC42.DLL时,全局变量可能会不同步而导致编译出错,所以应在UserExit函数的开头插入宏语句:AFX_MANAGE_STATE(AfxGetstaticModuleState());2.2应用程序框架2.2.1程序的组成UG/OpenAPI应用程序一般包括菜单、对话框、应用程序(DLL)和UG/OpenAPI库函数四部分,其中菜单和对话框是程序与用户交互的工具,从菜单可以启动应用程序、对话框等,在对话框激活控件时,将调用相应的回调函数,应用程序(回调函数)用基本的C/C++语言和的库函数编码。菜单:UG/Open提供了菜单开发工具MenuScript,它提供用户创建并编辑UG的下拉菜单及工具条。菜单文件扩展名为.men,工具条文件扩展名为.tbr,这两类文件放在应用程序目录的startup子目录中。对话框:UG/OpenUIStyler模块提供了强大的制作UG风格窗口的功能。对话框文件扩展名为.dlg,这类文件放在程序目录的application子目录中。应用程序(回调函数):C/C++语言程序,在C/C++集成开发环境中创建、编译连接并运行,生成.dll文件,放在程序目录的startup或udo子目录中。UG/OpenAPI库函数:默认存放在“$UGII_BASE_DIR\ugopen”目录中。在创建应用程序时需要配置。应用程序开发流程如图2-14所示。图2-14UG/OpenAPI应用程序开发流程2.2.2工程目录结构在用户设定的工程路径下需要建立UG系统规定的工程目录结构。UG启动时会在规定目录中寻找并加载相应的程序和资源。UG规定的目录有startup、application和Udo。UG对它们存放的文件做了如下的规定:(1)Startup目录存放UG启动时需加载的动态链接库文件(*.dll)、菜单脚本文件(*.men)和用户工具栏脚本文件(*.tbr)。(2)Apphcation目录存放具体的功能扩展程序文件,如UIstyler对话框文件(*.dlg)、工具图标文件(*.bmp)和位图调色板文件(*.ubm)。(3)Udo目录存放用户定义的数据和链接等。考虑到项目开发的需要和文档的完整性,除了UG系统规定的目录外,还需要建立一些自定义目录(仅供参考)。这些目录有Code、Configure和Document。这些目录中存放的文件类型有如下规定:(1)Code目录存放具体的程序代码,该目录在新建工程时创建。(2)Configure目录存放开发中所必需的配置文件,如文本文件(*.txt)、自定义配置文件(*.cfg)和电子表格Excel文件(*.xls)等。Configure目录的名称可以根据具体的编程需要由开发者选定,例如Excel、Temp等。(3)Document目录存放用户的文档文件,如视频演示文件(*.avi)、安装使用说明书(*.doc)和软件开发说明书(*.doc)等。图2-25所示给出了一个应用开发程序的目录结构,开发者可以根据实际情况做适当调整。图2-14工程目录结构2.3工程路径设置工程路径是指安装在目标硬盘的用户工程的路径,工程路径设置的目的是让UG软件在启动运行时能找到应用程序的物理位置,自动加载应用程序。例如,1.4节实例的工程路径是E:\ucocs。工程路径下至少存在UG规定的资源文件夹Startup和Application,用户可以将相关的资源文件放入这些文件夹中。注册工程路径有两种方法:配置文件法和环境变量法。2.4.1配置文件法在默认情况下,UG规定了配置文件custom_dirs.dat用于指明用户的工程路径,该文件位于路径“$UGII_BASE_DIR\ugii\menus\”。当UG启动时,系统检查该文件中注册的工程路径并自动加载该路径下的所有资源,包括用户菜单、对话框和动态链接库等。配置文件custom_dirs.dat的基本语法如下:(1)文件中允许使用注释,注释是以注释符“#”开头的一行文字。(2)每一行只能写一条工程路径,要确保路径的正确。(3)custom_dirs.dat允许添加多个文件路径,UG在启动时将按照先后顺序依次载入。1.4节的实例采用修改配置文件法注册工程路径,该方法操作简便,并且可以同时载入多个工程,因此得到广泛使用。值得注意的是,在多工程载入的情况下,应避免工程间DLL文件重名的情况发生。如果发生重名,系统会认为是重复注册现象,并且只载入注册靠前的工程而忽略其他的工程。例如,custom_dirs.dat按照先后顺序注册了两个工程路径Path1和Path2,但它们的DLL文件名称相同。此时无论激发哪个工程,都将执行路径Path1下的工程应用。2.4.2修改环境变量法UG环境配置文件ugii_env.dat中存在3个用于注册工程路径的环境变量,如表2-1所示。去掉环境变量前的注释符“#,在等号后写入具体的工程路径,则在UG启动的同时会将这些环境变量所指定的工程路径中的资源按照优先级的顺序加载。注册工程路径的环境变量环境变量名工程路径优先级UG_VENDOR_DIR存放UG指定开发商应用开发产品的工程路径最高UG_SITE_DIR存放其余开发商应用开发产品的工程路径其次UG_USER_DIR存放用户自己应用开发产品的工程路径最低下面在1.4节的实例中使用修改环境变量法来注册工程路径。(1)取消原有注册。打开文件custom_dirs.dat,删除或注释掉工程路径E:\ucocs(在路径前加上“#)并保存文件。此时打开UG将找不到工程的菜单命令。(2)修改ugii_env.dat中UG_SITE_DIR的值为“UG_SITE_DIR=E:\ucocs”并保存文件。注意,语句前不能有注释符“#”。此时打开UG,将恢复FileNew工程的使用。2.4UG/OpenAPI运行模式利用UG/OpenAPI编写的程序源代码并不能被UG直接执行,它和C/C++程序一样必须通过编译形成动态链接库或可执行文件后才能发挥作用。UG/OpenAPI程序可以在两种不同的环境下(内部和外部两种模式)运行,这取决于程序的连接方式。2.4.1内部模式内部模式(Internal开发模式)的程序只能在UG的界面环境下运行。在运行内部程序时,它们以.dll(动态链接库)的方式被调到UG的进程空间中。内部程序有下列特点:执行代码小,连接快;内部程序一旦被加载到内存中,只能通过UG/OpenAPI的卸载功能才能从UG运行功能中卸载它;运行结果在UG的界面图形环境中可见;入口函数是ufusr或ufsta;最大的优点是能处理UG的UI的对象接口,实现和UG界面的无缝集成并能扩充U
本文标题:2_UG二次开发应用框架
链接地址:https://www.777doc.com/doc-4001893 .html