proe二次开发教程——手把手教你如何二次开发本实例是针对proe4.0在VS2005环境下的开发,对于vs2003以上版本的开发本例均适用,本例从开始的打开vs2005软件开始讲解,一步不漏,并加入适当的解释和必要的说明,相信照着做完之后应该没有不成功的了!注:软件安装注意事项:proe的安装目录不能有空格,比如:“D:\Program Files\proeWildfire 4.0”是不对的,运行的时候会出错,要把路径中的空格去掉,如“D:\proeWildfire4.0”一、配置相关信息:打开VS2005,选择工具——》选项,在“项目和解决方案”中选择“VC++目录”,在“显示一下内容的目录”中选择“包含文件”,加入以下文件:D:\proeWildfire4.0\protoolkit\includesD:\proeWildfire4.0\protoolkit\protk_appls\includesD:\proeWildfire4.0\prodevelop\includes在“显示一下内容的目录”中选择“库文件”,加入以下文件:D:\proeWildfire4.0\protoolkit\i486_nt\objD:\proeWildfire4.0\prodevelop\i486_nt\obj注:这是开始前的环境配置,一次配置之后永久生效,以后再新建项目就不需要再配置了二、新建项目,进行项目设置:文件——》新建——》项目:选择MFC DLL 模板,输入项目名称:确定后点完成,项目生成后选择项目——》属性,进行属性设置:在test(本例的项目名称)属性页中选择配置属性——》连接器——》输入,在附加依赖项里加入:wsock32.libmpr.libpsapi.libprotk_dllmd.lib注:对于不同的环境附加依赖项是不同的,以上是VS2005版本的开发软件附加依赖项,如果是VC++6.0则是“protk_dll.lib protoolkit.lib mpr.lib wsock32.lib ”,同时还要加入忽略库“msvcrt.lib”,还要选择“强制输出”,否则程序会因为一些警告终止编译。
至此,所有相关的设置都已经完成!三、添加代码:在test.cpp 文件下加入如下代码:#include <ProToolkit.h>#include <ProMenu.h>#include <ProMenuBar.h>#include <ProUtil.h>void MyTest();static uiCmdAccessState UserAccessTestMenu (uiCmdAccessMode);extern "C" int user_initialize(){AfxEnableControlContainer();ProError status;ProName menumsgfile;uiCmdCmdId cmd_id;//在Help菜单的左边添加Test菜单ProStringToWstring(menumsgfile,"usermsg.txt");status = ProMenubarMenuAdd("Test","Test","Help", PRO_B_FALSE,menumsgfile);status =ProCmdActionAdd("MyTest",(uiCmdCmdActFn)MyTest,uiCmdPrioDefault,UserAccessTestMenu,PRO_B_TRUE, PRO_B_TRUE,&cmd_id);status = ProMenubarmenuPushbuttonAdd("Test","Hello","Hello","HelloHelp",NULL,PRO_B_TRUE,cmd_id,menumsgfile);return(0);}static uiCmdAccessState UserAccessTestMenu(uiCmdAccessMode access_mode){return (ACCESS_AVAILABLE);}void MyTest(){AfxMessageBox(_T("祝贺你!测试成功!"));}extern "C" void user_terminate(){}四、添加消息菜单:在目录“D:\test”下新建文件夹“text”,在文件夹中新建一个txt文件,取名为usermsg.txt,内容为:Test&Test测试(&T)#Hello&Hello你好(&H)#Hello HelpHello! This is a Pro/TOOLKIT sample.你好!这是第一个使用VC++开发TOOLKIT应用程序。
#五、编译,生成解决方案:至此,程序编译完成!注:如果编译过程中出现“0已成功 1已失败”,则说明程序有错误,对不起,回头找找吧,找不清楚后面别看了……六、编写注册文件:新建一个dat文件,位置自定,加入内容:name teststartup dllallow_stop TRUEexec_file D:\test\debug\test.dlltext_dir D:\test\textrevision 1151end注:这是注册文件,相关信息的作用请自己翻书了,我前面的帖子也有介绍的,最好放在启动目录里,调用的时候省事!七、使用辅助应用程序:打开proe软件,选择工具——》辅助应用程序:在弹出的对话框中点注册,选择第六步所写的注册文件,点击启动,则菜单上就会出现“测试(T)”菜单了:点击测试——》你好,会弹出对话框“祝贺你!测试成功!”,如图:至此,菜单的测试完成,这说明这个插件可以用了!后面将介绍如何插入对话框!八、添加对话框:右击资源视图中的test.rc,选择“添加资源”,在弹出的添加资源对话框中选择“Dialog”,新建之!如图:将新建的对话框更名为预览窗口,右击窗口空白处,在快捷菜单下选择“添加类”选项:在弹出的MFC类向导对话框中添加名为“dlg”的类:在test.cpp 文件中加入头文件“#include "dlg.h"”,并将刚才弹出的测试成功对话框改成自己新建的对话框,即将“AfxMessageBox (_T("祝贺你!测试成功!"));”处改成AFX_MANAGE_STATE(AfxGetStaticModuleState());dlg dlg;dlg.DoModal();编译之,编译成功后打开proe软件,注册插件,在新建的测试菜单下选择“你好”,就会弹出自己编辑的对话框!至此,编辑完毕!需要加入控件或者其他的东西就可以在这个对话框中添加,那就是后续的东西了,在此不详述了……PRO/ENGINEER二次开发常见问题解答1、 PRO/ENGINEER二次开发中,如何实现自动注册要实现DLL程序文件的自动注册,需要把注册文件(.dat)文件放到PRO/ENGINEER指定的几个文件夹,取名为Protk.dat,下面是几个存放注册文件的位置。
(1) Pro/ENGINEER启动目录下的Protk.dat或Prodev.dat。
(2)在Pro/ENGINEER的配置文件中,指定的以“PROTKDAT”、“PRODEVDAT”或“TOOLKIT_REGISTRY_FILE”变量所存储的位置下的Protk.dat或Prodev.dat。
(3) $LOADDIR\$MACHINE_TYPE\text\<LANGUAGE>目录下的Protk.dat或Prodev.dat。
(4) $LOADDIR\text目录下的Protk.dat或Prodev.dat。
如果在这些文件夹下还无法实现自动注册,可能是PRO/ENGINEER版本存在问题,访问PTC公司的网站:/go/timeout/,并下载相关补丁,具体操作过程如下:(1)、打开windows系统的任务管理器,在进程中选中nmsd,结束该进程。
(2)、在/go/timeout/下载nmsd.exe,放在一个临时文件夹中。
(3)、用下载的nmsd.exe覆盖$LOADDIR\$MACHINE_TYPE\i486_nt\nms下的nmsd.exe;(4)、重新启动PRO/ENGINEER就能自动加载菜单,并且在WINDOWS的任务管理器的进程中出现nmsd。
2、如何调用PRO/ENGINEER已有的按钮要调用PRO/ENGINEER已有的按钮,有两种方法。
(1)、使用函数ProCmdCmdIdFind()函数。
(2)、使用函数ProMacroLoad()或ProMacroExecute(),执行记录的一段宏命令。
也可以实现原有菜单的调用。
3、调用自定义菜单后,为什么PRO/ENGINEER的工具栏菜单中的再生按钮会消失当使用自定义菜单调用一个界面之后,当前的窗口将会处于非激活状态,所以很多的操作将无法使用。
可以使用【窗口】菜单下的【激活按钮】,也可以在自定义的菜单的函数中添加如下的语句来激活当前窗口:Int CurrentWindowToActiveID;ProWindowCurrentGet(&CurrentWindowToActiveID);ProWindowActivate (&CurrentWindowToActiveID);4、如何在PRO/ENGINEER中调试DLL程序启动PRO/ENGINEER后,如果有注册运行某程序,但是中间停止了程序,并添加新的菜单项,如果要使这个修改生效,必须重新启动PRO/ENGINEER,因为当注册运行程序一次,这个程序的信息文件就被导入内存,如果程序被停止,但是信息文件并没有从内存中消除,所以当再一次启动程序的时候,仍然使用的是原来的信息文件。
5、如何在程序中修改工作目录要修改工作目录,可以使用Pro/Toolkit提供的函数ProDirectoryChange(),实例程序如下:#include “ProUtil.h” //函数的头文件ProFilename filename1;ProError status;Status=ProDirectoryChange(ProStringToWstring(filename,”d:\temp”));6、一个dat文件怎样才能永久的注册在PRO/ENGINEER中执行在PRO/ENGINEER的菜单中【工具】中的【选项】里面查找protkdat,并设置需要被永久注册的文件名,然后把这个设置保存为config.pro,注册文件需要存放到启动目录中。