史上最全ProE二次开发测试及环境配置方法
- 格式:doc
- 大小:83.01 KB
- 文档页数:7
手把手教你开发Pro/TOOLKIT应用程序1前言本教程采用VS2008 + Pro/E Wildfire5。
0来讲解怎样开发Pro/TOOLKIT应用程序.开发Pro/TOOLKIT应用程序时,Pro/E和Visual Studio的版本需对应,否则很难搭建开发环境,其对应关系如下:•Wildfire 4。
0 〈〉 VS2008•Wildfire 5.0 <> VS2008•Creo 1。
0 <〉 VS2010•Creo 2.0 〈> VS2010本教程所述的方法完全适用于Wildfire4。
0 + VS2008、Creo1。
0 + VS2010、Creo2.0 + VS2010。
2一、准备1.Pro/TOOLKIT在安装Pro/E时,默认是不安装Pro/TOOLKIT的,必须选中【API工具包】节点下的Pro/TOOLKIT选项。
可以通过运行:[Pro/E安装目录]/bin/ptcsetup.bat 查看有无安装Pro/TOOLKIT。
2。
VS2008VS2008中文版下载地址:http://pan。
baidu。
com/s/1ntt7PH3最好安装下VS2008 SP1补丁,否则编译Debug版本时常会报错.VS2008 SP1中文版下载地址:http://www。
microsoft。
com/zh—CN/download/details。
aspx?id=13276如果你需要开发64位的Pro/TOOLKIT程序,请确保安装X64 Compilers andTools,如下图所示:3二、新建工程点击【文件】—〉【新建】—〉【项目】菜单命令,创建MFC DLL工程. 输入工程名称:test_wf5。
单击【确定】,然后在弹出的对话框中单击【下一步〉】DLL类型:使用共享 MFC DLL单击【完成】完成创建工程。
4三、配置工程属性1。
新增64位编译平台注意:如果只编译32位程序,请跳过此步骤。
PRO/E 5.0环境下使用vs2008进行二次开发1、环境设置(只需第一次设置)1)进入工具/选项对话框,包含文件:○1./prodevelop/include; ○2./protoolkit/include2)库文件:○1./protoolkit/i486_nt/obj; ○2./prodevelop/i486_nt/obj2、新建MFC DLL工程(采用默认动态链接烈类型)3、设置项目属性1)进入项目/属性对话框(ALT+F7),选择配置管理器,将Active版本类型改为Release。
2)选择配置属性/链接器/输入,在附加依赖项一栏输入:wsock32.lib mpr.lib protk_dll.lib prodev_dll.lib psapi.lib netapi32.lib3)在忽略特定库一项输入mvcrt.lib1)添加头文件#include"ProMenu.h"#include"ProUtil.h"#include"ProMenubar.h"2)添加初始化函数extern"C"int user_initialize() {ProError status;// 用户接口程序return status;}extern"C"void user_terminate() {// 结束代码}// 定义菜单的可访问性设置函数static uiCmdAccessState UserAccessDefault(uiCmdAccessMode access_mode) {return(ACCESS_AVAILABLE);}int MsgBox() // 定义菜单按钮相应函数{AfxMessageBox(_T("My first Pro/E redeveloping"));return 0;}extern"C"int user_initialize(){ProError status;uiCmdCmdId cmd_idl;ProFileName mfName;ProStringToWstring(mfName, "Msg.txt");// 添加菜单status = ProMenubarMenuAdd("CHECK", "CHECK", "Utilities",PRO_B_TRUE, mfName);// 添加菜单动作status = ProCmdActionAdd("ShowTest1", (uiCmdCmdActFn)MsgBox,uiCmdPrioDefault,UserAccessDefault,PRO_B_TRUE, PRO_B_TRUE, &cmd_idl);// 添加菜单按钮status = ProMenubarmenuPushbuttonAdd("CHECK", "MSGBOX", "PathMsg",NULL, NULL,PRO_B_TRUE, cmd_idl, mfName);return status;}4)关键函数wchar_t* ProStringToWstring ( wchar_t*wstr, char*str );// 把char*类型转换为wchar_t*ProError ProMenubarMenuAdd (ProMenuItemName menu_name,ProMenuItemLabel untranslated_menu_label,ProMenuItemName neighbor,ProBoolean add_after_neighbor,ProFileName filename )ProError ProCmdActionAdd (char *action_name,uiCmdCmdActFn action_cb,uiCmdPriority priority,uiCmdAccessFn access_func,// 是否在非激活窗口显示ProBoolean allow_in_non_active_window,//是否在附属窗口显示ProBoolean allow_in_accessory_window,uiCmdCmdId *action_id );ProError ProMenubarmenuPushbuttonAdd (ProMenuItemName parent_menu,ProMenuItemName push_button_name,ProMenuItemLabel push_button_label,ProMenuLineHelp one_line_help,ProMenuItemName neighbor,ProBoolean add_after_neighbor,uiCmdCmdId action_id,ProFileName filename );static uiCmdAccessState UserAccessDefault(uiCmdAccessMode access_mode) {return(ACCESS_AVAILABLE);// ACCESS_REMOVE 移除菜单项// ACCESS_INVISIBLE 不可见// ACCESS_UNAVALIABLE 可见,变灰不可选// ACCESS_DISALLOW 不可选// ACCESS_AVAILABLE 可选}5)编写信息文件格式第1行:关键字(必须与使用该信息文件函数的相关字符串相同)第2行:菜单显示英文文本第3行:中文文本第4行:为空(用#表示,必须在英文输入法下输入)6)编写注册文件格式:NAME 应用程序标识名EXEC_FILE 可执行程序名(包括路径)TEXT_DIR Text目录路径STARTUP 启动应用模式ALLOW_UP 是否允许在PROE工作时终止应用程序DELAY_START 是否延迟调用应用程序REVISION Pro/TOOLKIT版本号END 结束标志(每次修改后请重启PROE)。
什么是配置文件?首先我们以MS Word文档为例,启动Word默认情况下软件加载一个模板,该模板中包括版式、页边距、文字、段落等格式,然后我们通常对页面进行设置等等操作来满足我们在不同情况下的需求。
再次打开Word文档发现格式已经是原来设置好的格式,拿来即用,不用再一一重新设置。
有人就问,为什么我在Pro/E中辛苦设置好菜单、公差、界面、单位……,重新启动Pro/E却没有出现我的个性化配置?难道Pro/E就没有和MS Word文档一样的功能?答案是肯定的!Pro/ENGINEER软件系统同样提供给用户定制自己工作环境的配置文件。
它是一个文本文件,利用这个文件用户可以定制很多标准设置,如定制菜单、公差显示模式、尺寸单位、映射键(Ma pkey)、计算精度、工程图控制等等。
一般在企业或公司把它定制为标准文件,作为大家共同的工作环境,在应用产品数据管理(PDM)和协同设计过程中便于交流和数据共享。
那么配置文件(或称映射文件)又包括哪些呢?下面仅介绍常用的几个:config.pro 系统配置文件,配置整个PROE系统gb.dtl 工程图配置文件,你可以先简单的理解为设置箭头大小,文字等标注样式。
format.dtl 工程图格式文件(可以简单的理解为图框)的配置文件。
table.pnt 打印配置文件,主要设置工程图打印时的线条粗细、颜色等。
A4.pcf打印机类型配置文件,主要设置工程图打印出图时的比例、纸张大小等。
config.win操作界面、窗口配置文件,如模型树窗口的大小,各种图标、工具栏、快捷键在窗口的位置等。
Tree.cfg模型树配置文件,主要设置在模型树窗口显示的内容、项目。
注1:config.win文件通常以config.win.* 的形式出现,后缀*是流水号,为阿拉伯数字序号,形如:config.win.5。
该文件每改动一次,则新生成一个流水号加1的新文件,如config.win.6,依次类推。
用Microsoft Visual 2008对PRO/E4.0二次开发步骤1.因为PRO/E4.0装在E盘,在二次开发时在E盘新建一个文件夹mytest3 (可以是其他名字的文件夹,注意mytest3必须与PRO/E4.0在同一盘里),在mytest3中在新建一个文件夹text(必须是text)。
2.如图(1),新建一个Hello.dll的文件图(1)3.如图(2),选中使用共享MFC DLL的规则DLL(D)4.单击项目---属性,进行图(3)---图(10)的操作。
图(3) 属性配置,注意是在Release下进行编译的,Release配置1图(4) Release配置2图(5) 在字符集中选择使用多字节字符集图(6) 对预处理器中的预处理器定义进行设置图(7) 代码生成,设置运行时库为多线程DLL(/MD)图(8) 语言的设置图(9) 添加附加依赖项wsock32.libmpr.libpsapi.libprotk_dllmd.libprodev_dllmd.libnetapi32.lib图(10) 添加忽略特定库msvcrtd.lib图(11) 单击主菜单上的工具----选项图(12) 添加包含文件,四个includes图(13) 添加库文件,两个obj图(14) 双击Hello.cpp图(15) 添加头文件#include "ProMenubar.h"#include "ProMenu.h"#include "ProUtil.h"#include <ProToolkit.h>#pragma comment(lib,"netapi32")图(16) 在Hello.cpp的最后添加程序static uiCmdAccessState AccessDefault(uiCmdAccessMode access_mode) {return(ACCESS_AVAILABLE);}void Test1(){AfxMessageBox(_T("轴"));}void Test2(){AfxMessageBox(_T("齿轮"));}extern "C" int user_initialize(){ProError status;ProFileName MsgFile;ProStringToWstring(MsgFile,"IconMessage.txt");//注意此处的IconMessage与后面的text文件夹下的IconMessage.txt文件名必须相同uiCmdCmdId PushButton1_cmd_id,PushButton2_cmd_id;status=ProMenubarMenuAdd("MainMenu","Function","Help",PRO_B_TRUE,MsgFile); ProCmdActionAdd("PushButton1_Act",(uiCmdCmdActFn)Test1,12,AccessDefault,PRO_B_TRUE,P RO_B_TRUE,&PushButton1_cmd_id);ProMenubarmenuPushbuttonAdd("MainMenu","PushButton","FirstButton","this button will show a message",NULL,PRO_B_TRUE,PushButton1_cmd_id,MsgFile);ProCmdActionAdd("PushButton2_Act",(uiCmdCmdActFn)Test2,uiCmdPrioDefault,AccessDefault,P RO_B_TRUE,PRO_B_TRUE,&PushButton2_cmd_id);ProMenubarmenuPushbuttonAdd("MainMenu","PushButton2","SecondButton","this button will show a message",NULL,PRO_B_TRUE,PushButton2_cmd_id,MsgFile);return status;}extern "C" void user_terminate(){AFX_MANAGE_STATE(AfxGetStaticModuleState());}图(17) 选择生成Hello(U)图(18) Hello(U)生成成功后在E:\mytest3\Hello\Release中可以看见Hello.dll文件,将Hello.dll 文件复制到E:\mytest3中。
Proe Wildfire 5.0 J-link二次开发——入门篇为什么选择J-link?选择J-link二次开发的理由:J-link拥有开源社区的强大优势,JAVA语言开源,社区很活跃,可以说除了PROE以外的所有开发工具都可以免费获得,并且这些开发工具的性能绝不逊色于microsoft;J-link二次开发的程序运行编译过程都较C++二次开发简单。
J-link二次开发所需的准备工作:1.熟悉JAVA语言;JAVA仍为IT界使用最为广泛的开发工具之一,其学习难度并不比C++语言高,网络上有大量免费视频可供学习。
2.初次安装PROE时请选中J2RE(java 2 runtime enviroment)与J-link选项随PROE主程序一起安装,一般默认安装未选中此模块,所以请务必注意;自安装的JRE目录是D:\PTC\pr oeWildfire 5.0\i486_nt\obj\JRE;若已经安装了PROE但是没有安装J2RE(java 2 runtime e nviroment),也可以下载jdk6来安装(jdk7未试过)。
3.安装JAVA的集成开发环境IDE,可以下载Eclipse,选Java开发版即可,不要jee的(用于Web开发)。
4.配置开发环境:配置JVM,设置环境变量(如果网友安装目录与此不同请自行注意更改)5.学习J-link请参考PROE目录下*\jlink\jlinkug.pdf文档,也可以用浏览器打开*\jlin k\jlinkdoc\index.html,里面包含开发文档和api。
自此,J-link开发环境就配置完成!下面以Proe自带的入门的例子来测试一下J-link开发环境是否配置正确。
1. 打开eclipse(网上关于eclipse使用资料非常多,可自行查询),依次File->new->j ava project,建立new javaproject,工程名如:InstallTest,其他选项默认即可,点击fin ish;2. 在InstallTest工程中添加外部JAR包,将*\text\java\pfc.jar引入到project中;3.在InstallTest工程中,新建2个空的java class,name分别是StartInstallTest和pf cInstallTest,然后用win写字板或者EditPlus等工具分别打开*\jlink\jlink_appls\instal l_test下的StartInstallTest.java与pfcInstallTest.java两个文件中的内容复制到刚才创建的相应的class中,并覆盖原有内容;4. 点击run->run运行并编译,因为需和proe配合才能显示工作效果,所以其实就是确认完成编译罢了;5. 在本机上新建test文件夹,在第2步所创建的InstallTest工程目录下找到bin文件夹,复制其中所有的.class文件至test文件夹中。
ProE 二次开发入门实例1.创建项目这个就不用多说了吧,新建–>项目–>C++->MFC DLL2.项目配置这个可以参考我以前的一篇文章:Pro/ENGINEER的二次开发(5)-Vc环境配置3.初始化菜单文件在这里,先创建一个菜单,作为演示,:(1)在住文件添加Pro/TOOLKIT头文件。
由于在后面的操作中,都要用到这些头文件,故将头文件放到stdafx.h文件中。
(2)添加Pro/TOOLKIT程序的初始化函数和终止函数,(3)创建一个窗体:右键单击解决方案的资源文件,然后点击添加Dialog,如图:(4)添加一个按钮,然后双击添加类向导,创建CTestDialog类,然后再窗体中添加一个按钮,做测试之用,如图:(5)双击按钮,添加一个按钮单击函数,写下一下代码:void CTestDialg::OnBnClickedButton1(){// TODO: 在此添加控件通知处理程序代码AfxMessageBox("Hello ,Pro/e second develop!!!~~~");}4.创建菜单(1)将窗体头文件引入到主程序中,添加一些必要的声明定义://添加初始化启动函数//这里附带将菜单的实现部分加进来//定义菜单的命令函数//1.窗体显示函数void helloFormFn();//2.用户菜单访问权限设置随时有效static uiCmdAccessState helloFormAccessFn(uiCmdAccessMode access_mode){return ACCESS_AVAILABLE;//设置全有效}//3定义全局对话框变量CTestDialg * hellodlg=NULL;//窗体界面,后续更改(2) 接下来,开始写菜单注册函数了,具体的都在下面,:5.生成Dll文件右键项目,然后点击生成,即可6.编写菜单资源文件在项目目录下创建一个text文件夹,然后再在里面分别创建chinese_cn和usascii两个文件夹.再分别在里面创建一个文本文件message.txt,内容为:Gear毕业设计##Hello演示测试效果##演示测试演示测试##7.注册到Pro中,详细说明见Pro/ENGINEER的二次开发(10)-注册到Proe最后,见两张示意图:。
Pro/ENGINEER 的二次开发方法Pro/e提供的二次开发方法有很多如表族(Family Table),用户定义特征(UDF),Pro/Program, J-Link, Pro/toolkit,Rand公司开发的Automation Gateway等,在不同的应用场合,它们各有其优点。
根据模架的结构特点,先用较为合适Pro/ENGINEER 的二次开发方法。
2各种方法的简介2.1 族表(Family Table)Family Table 称为族表,通过族表可以方便的管理具有相同或相近结构的零件,特别适用于标准零件的管理。
族表通过建立通用零件为父零件,然后在其基础上对各参数加以控制生成派生零件。
整个族表通过电子表格来管理,所以又被称为表格驱动。
2.1.1标准模架库建立的过程(1)标准模架库的命,名组织标准模架库的使用是通过调用实体造型文件中的Instantiate(实例)来实现的,使用中必须遵循一定命名规则才能正确调用标准件库中所需的实例。
为此,把标准模架库的根目录建立在Pro/ENGINEER的安装目录下,按照模架的类型分别建立相应的子目录如Back pillar sets(后导柱模架)Center pillar sets(中间导柱模架)Diagonal pillar sets(对角导柱模架)等。
路径为<Pro/ENGINEER>\STDLIB\Back pillar sets。
Back pillar set 的下面又细分为各种型号的模架。
如图所示(2)建立模板利用Pro/e的实体造型功能,为标准模架所需的各个标准零件造型,如上模座、下模座、导柱、导套等,并存入到相应的子目录。
(3)装配模架利用步骤,所设计的标准零件,建立标准模架的装配图,存入到相应的子目录。
此装配图将作为通用组件,用来生成一系列标准模架。
(4)利用Pro/Program对模架的装配模板进行参数化编程2.1.2在装配模板中编程时,主要用到的语句有三种:①INPUT…END INPUT语句对于所设计零件的某些关键性尺寸或可以弹性化改变的尺寸,Pro/ENGINEER都会分别给它们一个变量如d0,d1等。
ProE5protoolkit二次开发环境设置ProE 5.0+VS2008Protoolkit二次开发环境配置From tkuser.pdf: All Creo Elements/Pro TOOLKIT applications on 32-bit and 64-bitWindows platforms must be built using the Microsoft Visual 2008 compiler. A new library ws2_32.lib has been added.The CC flags no longer need the -D_USE_32BIT_TIME_T flag on32-bit Windows platforms. These changes have been incorporatedin the sample makefiles.1、包含文件和库文件的设置(1)包含文件的添加点击“工具”→“选项”→“项目和解决方案”→“VC++目录”,选择“包含文件”依次添加:D:\PTC\Creo Elements\Pro5.0\protoolkit\includesD:\PTC\CreoElements\Pro5.0\prodevelop\prodev_appls\includesD:\PTC\Creo Elements\Pro5.0\prodevelop\includesD:\PTC\CreoElements\Pro5.0\protoolkit\protk_appls\includes(2)库文件的添加:步骤同包含文件的添加…D:\PTC\Creo Elements\Pro5.0\prodevelop\i486_nt\objD:\PTC\Creo Elements\Pro5.0\protoolkit\i486_nt\obj2、创建MFC DLL项目如图:3、进行工程属性配置(1)“项目”→“属性”→“配置属性”→“常规”,点击右上角的“配置管理器”,使用release。
ProE二次开发教程Pro/ENGINEER Wildfire4.0 &Microsoft Visual Studio 2005 实现二次开发首个测试作者:无维网TomLee今天终于有时间玩一玩,Microsoft Visual Studio 2005还不熟悉,还要继续摸索: 下面我把我的测试成功的例子做个教程,希望对需要配置新环境进行开发的朋友有所帮助!新建项目新建MFC DLL默认下一步默认完成新建开始创建程序代码代码部分的解释如下:extern "C" int user_initialize(int argc, /** Number of arguments **/char *argv[], /** Pro/E arguments **/ char *proe_vsn, /** Pro/E version **/ char *build, /** Pro/E build **/ wchar_t err_buff[]) /** Error buffer **/ {ProName msgFileName;ProStringToWstring(msgFileName,"message.txt");ProMessageDisplay(msgFileName, "USER Welcome you!");return 0;}extern "C" void user_terminate(){return;}这里我只使用了一个ProMessageDisplay函数来做信息显示功能的测试,本教程的主要目的在于配置编译环境,所以未设置任何功能,甚至菜单都没加:lol包含文件的设置(include)库文件(lib)项目设置,附加的库wsock32.libmpr.libpsapi.libprotk_dllmd.lib(此处接见湃睿技术社区byan的设置)项目设置,预处理器定义添加:PRO_USE_VAR_ARGS,这个是使用ProMessageDisplay函数的需要不管选择Win32 Release 还是Win32 Debug设置都相同,但是不知道什么原因,编译时很多警告,同时我编译成功的Debug 下面的dll不能用,只能用Release,原因不明,欢迎讨论编译警告信息如下:------ 已启动生成: 项目: ProMessageDisplay, 配置: Release Win32 ------正在编译...stdafx.cpp正在编译...ProMessageDisplay.cpp正在编译资源...正在链接...正在创建库c:\toolkit_test\ProMessageDisplay\Release\ProMessageDisplay.lib 和对象c:\toolkit_test\ProMessageDisplay\Release\ProMessageDisplay.exp正在生成代码已完成代码的生成protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfprintfprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vwprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfwprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vswprintfprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_vswprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsnprintfprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsnprintfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vwscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vfscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vsscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btk_vswscanfprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToWideprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToWideprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToEucprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToEucprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToNativeprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToNativeprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToWideprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToEucprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToNativeprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToNativeprotk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrWideToUtf16protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrWideToUtf16protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrWideToUtf8protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrEucToUtf16protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrEucToUtf8protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrNativeToUtf16protk_dllmd.lib(protk_comm.obj) : warning LNK4049: 已导入本地定义的符号_btkStrNativeToUtf8protk_dllmd.lib(cu_dll_tools.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(cttime.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号protk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(cu_appid.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctmemmgr.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenvprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_getenv protk_dllmd.lib(cu_appid.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(cttime.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(frgnalt3.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctmemmgr.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintfprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_sprintf protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_u16tou8protk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctwcfun_mt.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeIsEnabledprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_u8tou16protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToUtf8protk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf16ToUtf8protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToUtf16protk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalphaprotk_dllmd.lib(ctwcfun_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalphaprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalphaprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswasciiprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswasciiprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctstrutil_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswdigitprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswspaceprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_wctombprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fgetcprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_mbtowcprotk_dllmd.lib(ctwcfun_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_mbtowcprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fgetwsprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stdinprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_strcasecmpprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToUtf16Allocprotk_dllmd.lib(ctstrutil.obj) : warning LNK4049: 已导入本地定义的符号_btkStrUtf8ToUtf16Allocprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fputsprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_pro_vsnprintf_low_legacyprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_pro_vsnprintf_lowprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_fgetsprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_scanf_stream_lowprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_putenvprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_putenvprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalnumprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswalnumprotk_dllmd.lib(ctwcfun.obj) : warning LNK4049: 已导入本地定义的符号_btk_iswrtolprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btkGetMemprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_spawnvpprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_systemprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_wcstombsprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_mbstowcsprotk_dllmd.lib(ctsigutil_mt.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctsigutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stderrprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_removeprotk_dllmd.lib(ctsyscall.obj) : warning LNK4049: 已导入本地定义的符号_btk_openprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_openprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_open protk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_strncasecmpprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_strncasecmpprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_getdcwdprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_Disposeprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkLangEucEncodingprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkLangGetCurrentprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkLangNativeEncodingprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_Createprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUtfTypeFromBOMprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUtfTypeToBOM_btkUConv_ToPivotWithOffsetsprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_CountPendingToPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_Resetprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_FromPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_CountPendingFromPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_TranscodeExprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btkUConv_ToPivotprotk_dllmd.lib(ctpfa.obj) : warning LNK4049: 已导入本地定义的符号_btk_sscanf protk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_sscanfprotk_dllmd.lib(cttime.obj) : warning LNK4049: 已导入本地定义的符号_btk_sscanfprotk_dllmd.lib(ctmisc.obj) : warning LNK4049: 已导入本地定义的符号_btk_execvprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_get_stdoutprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_fflushprotk_dllmd.lib(windows_32.obj) : warning LNK4049: 已导入本地定义的符号_btk_strlwrprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_fullpathprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_getcwdprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_getcwdprotk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_statprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_stat protk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_stat protk_dllmd.lib(ctfileutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_accessprotk_dllmd.lib(frgnalt3.obj) : warning LNK4049: 已导入本地定义的符号_btkUnicodeDisableprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_chdir protk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_mkdirprotk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_rmdirprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_rmdir protk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_unlinkprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_unlink protk_dllmd.lib(apfutil.obj) : warning LNK4049: 已导入本地定义的符号_btk_utimeprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_utimeprotk_dllmd.lib(ctpfafs.obj) : warning LNK4049: 已导入本地定义的符号_btk_tempnamprotk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_fopen protk_dllmd.lib(ctdci.obj) : warning LNK4049: 已导入本地定义的符号_btk_rename正在嵌入清单...生成日志保存在“file://c:\toolkit_test\ProMessageDisplay\ProMessageDisplay\Release\BuildLog.htm”ProMessageDisplay - 0 个错误,159 个警告========== 生成: 1 已成功, 0 已失败, 0 最新, 0 已跳过==========创建测试目录创建测试快捷启动启动验证中文英文测试数据下载请到无维网!。
Pro/TOOLKIT是Pro/ENGINEER的一个应用程序接口(API),其编程语言是C 语言,它可以对Pro/ENGINEER进行功能扩展,满足PTC客户的特定需求。
而且,Pro/TOOLK提供了定制标准Pro/ENGINEER用户界面的能力,自动执行重复性的程序,通过Pro/ENGINEER 集成的内部程序(Dll)或外部应用程序(Exe)可以为造型用户提供自定义的应用程序、设计规划和绘图自动化。
Pro/TOOLKIT 是Pro/ENGINEER 软件系统自带的二次开发模块,可以直接访问Pro/ENGINEER 软件的最底层数据库资源,它几乎能够访问所有Pro/ENGINEER 的资源,可以说这是进行Pro/ENGINEER 二次开发最根本的方法。
但想用Pro/TOOLKIT进行二次开发,需要具有Visual C++或者C语言的编程功底。
现在的CAD/CAM系统,如Pro/ENGINEER、UG等,都是比较通用的大型软件系统,用这样的大型系统建立我们所需要的产品模型可能需要大量的时间。
如果能在此类软件的基础上,开发出适合本单位产品的应用程序,无疑会大大提高本单位产品的设计效率,加快产品的更新速度,从而提高企业的市场竞争能力。
所谓“二次开发”就是在商业应用软件系统的基础上开发本地化应用程序的过程。
编辑本段Pro/ENGINEER的二次开发方法Pro/ENGINEER的二次开发方法有五种:(1)基于Pro/TOOLKIT的二次开发过程Pro/TOOLKIT是针对Pro/ENGINEER功能强大的二次开发工具。
它封装了许多针对Pro/EN-GINEER底层资源调用的库函数与头文件,借助第三方编译环境(C语言、VC++语言等)进行调试。
使用Pro/TOOLKIT开发应用程序包含三个基本步骤:编写源文件(包括资源文件和程序源文件);生成可执行文件;可执行文件在Pro/ENGI-NEER中注册并运行。
第一章 PRO/TOOLKIT的安装及VC++环境的配置§1.1 PRO/TOOLKIT的安装PRO/TOOLKIT是PROE二次开发的接口,采用C语言的结构编程语言,本文假设PROE安装在E:\ProgramFiles\proeWildfire4.0,在PTC Set up的对话框如图1-1中选择API工具包,图1-1 PTC Set up的对话框选中PRO/TOOLKIT,点击右键选择安装该组件,安装完成后,可以在PROE 的安装目录下看到E:\Program Files\proeWildfire 4.0\protoolkit的文件夹,其中,里面的内容见图1-2所示。
图1-2 PRO/TOOLKIT 文件夹下的内容另外,选择E:\Program Files\proeWildfire 4.0\bin目录下的ptcsetup.bat文件可以再现PROE的安装界面,但是,该方法只能修改PROE的各个参数的配置,不能增加安装过程中的各个组件。
§1.2 VC++编程环境的设置§1.2.1 VC++目录设置当我们打开VC++2008时,我们在工具-选项-项目和解决方案中的VC++目录,得到如图1-3所示的对话框所示的界面。
图1-3 VC++中选项对话框目录设置对整个VC++中的各个项目均起作用,如果VC++不重新安装或者其他的较大的变化,目录设置可以不用改动。
目录的设置主要包括两个方面:包含文件的路径的设置及库文件的设置。
点击图1-3所示的可执行文件右边的下拉三角号,选择包含文件,如图1-4所示。
图1-4 VC++中包含文件对话框添加包含文件的路径。
具体的包含文件的路径主要有一下三个:E:\ProgramFiles\proeWildfire4.0\protoolkit\protk_appls\includesE:\Program Files\proeWildfire 4.0\protoolkit\includesE:\Program Files\proeWildfire 4.0\prodevelop\includes点击图1-3所示的可执行文件右边的下拉三角号,选择库文件,如图1-5所示,添加库文件的路径,如下所示:图1-5 VC++中库文件对话框E:\ProgramFiles\proeWildfire4.0\protoolkit\protk_applsE:\Program Files\proeWildfire 4.0\protoolkit\i486_nt\objE:\Program Files\proeWildfire 4.0\prodevelop\i486_nt\obj至此,PROE与VC++中的连接目录的设置已经结束。
Pro/E二次开发程序设置与调试安装Pro/E首先确保你正确安装了Pro/EPro/E开发工具Toolkit的目录结构:设置包含文件和库文件然后在你的VS2005IDE中设置好包含文件和库文件目录。
点击工具->选项菜单,弹出选项对话框1.加入包含文件:在安装目录下<安装目录>\protoolkit\includes2.加入库文件:在安装目录下<安装目录>\protoolkit\i486_nt\obj新建工程新建一个工程1.选择MFC DLL模板;2.填入项目名称,点击确定;3.在应用程序设置页,选择“使用共享MFC DLL的规则DLL”4.点击完成。
设置工程属性点击项目->属性菜单开始设置项目属性。
1.在C/C++标签下预处理器页面,预处理器定义中添加一条PRO_USE_VAR_ARGS宏。
3.在语言页设置将wchar_t视为内置类型为否(/Z c:wchar_t-)4.在连接器标签->输入页面a)附加依赖项中添加要附加的依赖库文件:protk_dllmd.lib,wsock32.lib,mpr.lib。
b)在忽略特定库中添加要忽略的库文件:msvcrt.lib。
5.在链接器->命令行标签->附加命令选择中填入/FORCE设置完成以上内容后即可编译成功。
编辑源文件重新编译你的工程注册和运行程序1.编写一个注册文件Protk.dat,该文件描述了二次开发程序的注册信息。
典型的文件结构如下:语法意义如下:name:为你的二次开发程序指定一个单独的名字。
startup:指定程序模式,这里是DLL模型。
exec_file:你编译出来的动态链接库的放置路径。
text_dir:应用程序使用的菜单和消息文件的放置路径。
allow_stop:程序运行停止。
delay_start:延迟启动。
end:注册文件结束2.在工程目录下新建一个Text文件夹,然后在Text文件夹下面,新建一个user_msg.txt启动Pro/E主程序,选择工具->辅助应用程序菜单(Tools->Auxiliary Application)4.然后点击注册(Register)按钮,选择前面编写的注册文件protk.dat。
32位系统preo5.0二次开发测试及环境配置首先,proe5.0是配合VC++2008来进行二次开发的,因此首先得安装VS2008,其次,要确保proe5.0中已经安装了protoolkit,安装方法略。
如何测试Pro/Toolkit安装成功第一步,找到proe安装目录下的protooltik文件夹,并找到..\protoolkit\i486_nt\obj这个路径下的一个叫做make_install的文件,用写字板打开,找到如下# Pro/Toolkit Source & Machine Loadpoint (EXTERNAL USE - DEFAULT)这么一行字,然后把它下面的PROTOOL_SRC=../..改成PROTOOL_SRC = ...\PTC\protoolkit,保存下关闭就好了。
第二步,在“开始”中找到Microsoft Visuall Studio Tools→Visual Studio Tools→Visual Studio Tools2008命令提示符,打开。
第三步,在打开的这个界面里面敲下如下字符cd ...\PTC\protoolkit\i486_nt\obj,然后回车,再敲上如下字符:nmake /f make_install dll,然后再回车,等其运行完毕,关掉命令提示符,然后再回到...\PTC\protoolkit\i486_nt\obj文件夹中,会发现多了一个pt_inst_test.dll文件,证明前面的工作全是成功的。
第四步,回到...\PTC\protoolkit文件夹,找到protk.dat文件,用写字板打开,将第二行和第三行前面的“.”改成路径...\PTC\protoolkit,将第五行后面的“18”改成“wildfire5.0”,其他保持不变,保存,关闭。
第五步,启动proe5.0,找到工具→辅助应用程序,打开,点“注册”,找到...\PTC\protoolkit,里的protk.dat,打开,选中,点“启动”,发现左上角出现“’pt_inst_test.dll’启动成功”。
32位系统preo5.0二次开发测试及环境配置首先,proe5.0是配合VC++2008来进行二次开发的,因此首先得安装VS2008,其次,要确保proe5.0中已经安装了protoolkit,安装方法略。
如何测试Pro/Toolkit安装成功第一步,找到proe安装目录下的protooltik文件夹,并找到..\protoolkit\i486_nt\obj这个路径下的一个叫做make_install的文件,用写字板打开,找到如下# Pro/Toolkit Source & Machine Loadpoint (EXTERNAL USE - DEFAULT)这么一行字,然后把它下面的PROTOOL_SRC=../..改成PROTOOL_SRC = ...\PTC\protoolkit,保存下关闭就好了。
第二步,在“开始”中找到Microsoft Visuall Studio Tools→Visual Studio Tools→Visual Studio Tools2008命令提示符,打开。
第三步,在打开的这个界面里面敲下如下字符cd ...\PTC\protoolkit\i486_nt\obj,然后回车,再敲上如下字符:nmake /f make_install dll,然后再回车,等其运行完毕,关掉命令提示符,然后再回到...\PTC\protoolkit\i486_nt\obj文件夹中,会发现多了一个pt_inst_test.dll文件,证明前面的工作全是成功的。
第四步,回到...\PTC\protoolkit文件夹,找到protk.dat文件,用写字板打开,将第二行和第三行前面的“.”改成路径...\PTC\protoolkit,将第五行后面的“18”改成“wildfire5.0”,其他保持不变,保存,关闭。
第五步,启动proe5.0,找到工具→辅助应用程序,打开,点“注册”,找到...\PTC\protoolkit,里的protk.dat,打开,选中,点“启动”,发现左上角出现“’pt_inst_test.dll’启动成功”。
关闭“辅助应用程序”。
第六步,打开“文件”菜单栏,会有一个“安装检测”,点击后,会出现“PRO/PROTOOLKIT 安装检测成功”。
至此,PRO/PROTOOLKIT安装检测全部完成。
配置VC++2008Debug模式配置第一步,加上PRO/TOOLKIT的包含文件和库文件,打开工具→选项→项目与解决方案→VC++目录显示以下内容的目录→包含文件,添加如下文件:...\PTC\protoolkit\includes...\PTC\protoolkit\protk_appls\includes...\PTC\prodevelop\includes...\PTC\prodevelop\prodev_appls\includes将包含文件换为库文件,添加如下文件:...\PTC\protoolkit\i486_nt\obj...\PTC\prodevelop\i486_nt\obj然后点击确定,包含文件和库文件加载完毕。
第二步,新建一个MFC工程,打开项目→属性→配置属性→链接器→输入,在附加依赖项中输入以下代码:(若为MFC DLL文件)wsock32.libmpr.libprotk_dllmd.libprodev_dllmd.libpsapi.libnetapi32.lib(若为MFC应用程序工程)wsock32.libmpr.libprotk_dllmd.libprodev_dllmd.libpsapi.libnetapi32.libpt_asynchronous.lib在忽略待定库中,添加libcmtd。
第三步,打开项目→属性→配置属性→C/C++→预处理器→预处理器定义中添加命令PRO_USE_VAR_ARGS。
(若为异步模式,异步模式其他设置请参考文献[1])wsock32.libmpr.libpsapi.libnetapi32.libpt_asynchronous.libprotkmd.libprodevelop.libprodevmd.lib在忽略待定库中,添加libcmtd。
第三步,打开项目→属性→配置属性→C/C++→预处理器→预处理器定义中添加命令PRO_USE_VAR_ARGS。
Release模式配置第一步,与Debug模式配置相同。
第二步,新建一个MFC工程,注意向导的第二步中应选择使用静态链接MFC库方式。
1、打开项目→属性→配置属性→调试→配置管理器中进行如下操作。
将配置选项改为“活动(Release)”2、打开项目→属性→配置属性→常规,将“字符集”选项改为“使用多字节字符集”。
3、打开项目→属性→配置属性→C/C++→预处理器,在预处理定义中输入PRO_USE_VAR_ARGS和_AFXDLL,点击OK。
4、打开项目→属性→配置属性→C/C++→代码生成,将“运行时库”选项改为“多线程DLL/MD”。
5、打开项目→属性→配置属性→C/C++→语言,将“将wchar_t视为内置类型”改为“否(/Zcwchar_t-)”。
6、打开项目→属性→配置属性→链接器→输入,在附加依赖项中输入以下代码:wsock32.libmpr.libpsapi.libprotk_dllmd.libprodev_dllmd.lib配置完成。
第三步,测试程序。
1、添加头文件:#include "ProMenubar.h"#include "ProMenu.h"#include "ProUtil.h"#include <ProToolkit.h>#define MSGFILE "message.txt"#pragma comment(lib, "netapi32")static uiCmdAccessState UserAccessTestMenu (uiCmdAccessMode);extern "C" int user_initialize()// 入口函数{AfxEnableControlContainer();ProError status;ProName menumsgfile;uiCmdCmdId cmd_id;//在Help菜单的右边添加“二次开发菜单”ProStringToWstring(menumsgfile,"usermsg1.txt");status=ProMenubarMenuAdd("Menu0","USERMenu0","Help",PRO_B_TRUE,menumsgfile);return(0);}static uiCmdAccessState UserAccessTestMenu(uiCmdAccessMode access_mode){return (ACCESS_AVAILABLE);}extern "C" void user_terminate() // 出口函数{AFX_MANAGE_STATE(AfxGetStaticModuleState());}2、创建注册文件protk.dat,内容如下:name Dteststartup dllallow_stop TRUEdelay_start FALSEexec_file …\Dtest\Release\Dtest.dlltext_dir …\Dtest\textrevision widfire5.0end3、在Dtest文件夹中创建text文件夹,在text文件夹内创建usermsg1.txt文件,内容如下:USER Menu()二次开发菜单##4、注册运行。
64位系统preo5.0二次开发环境配置64位操作系统的环境配置与32位的有所不同,首先64系统需要在X64平台上进行调试,而不是在默认的Win32上,其次,在添加PRO/PROTOOLKIT的包含文件和库文件时,打开工具→选项→项目与解决方案→VC++目录显示以下内容的目录→包含文件,此时平台要注意选用X64平台,在包含文件和库文件中添加和32位系统里一样的include文件和obj文件:...\PTC\protoolkit\includes...\PTC\protoolkit\protk_appls\includes...\PTC\prodevelop\includes...\PTC\prodevelop\prodev_appls\includes将包含文件换为库文件,添加如下文件:...\PTC\protoolkit\i486_nt\obj...\PTC\prodevelop\i486_nt\obj这里要多出一步,将库文件转换为可执行文件,并添加如下内容:$(SystemRoot)\System32$(SystemRoot)$(SystemRoot)\System32\wbem(注:若不加载此项,会提示诸如无法生成“cmd.exe”的错误。
然后点击确定,包含文件和库文件和可执行文件加载完毕。
这时再运行程序,就不会出现错误。
二次开发基础知识1、菜单栏菜单的添加(Pro/E二次开发技术基础P103)菜单栏菜单是Pro/E菜单体系的最顶层菜单,ProMenubarMenuAdd()是完成菜单栏菜单添加的函数2、菜单按钮的添加单击某个菜单按钮后,应能调用某个函数,因此它的添加过程分为两步:首先是添加动作函数和菜单按钮,然后把动作函数和菜单按钮联系起来,作为菜单按钮的响应函数。
2.1 菜单动作函数的添加在将菜单按钮和动作函数联系起来之前,先在程序主文件的头文件中定义动作函数,Pro/E中,将菜单按钮和动作函数联系起来的函数是ProCmdActionAdd(),该函数将返回一个uiCmdCmdId类型变量,此变量用来表示动作函数的标识,在添加菜单项菜单时需要提供动作函数的标识。
2.2 菜单按钮的添加向菜单栏菜单中添加菜单按钮的函数是ProMenubarmenuPushbuttonAdd()3、复选菜单按钮的添加添加复选按钮之前也需要设置复选按钮的响应函数、复选按钮初始状态函数。
使用复选按钮的过程中,需要有可以得到按钮状态值以及设置按钮状态值的函数。
因此添加一个复选框菜单按钮需要用到四个函数:ProCmdOptionAdd();选项设置命令函数的添加ProMenubarmenuChkbuttonValueGet();复选按钮状态值的获取ProMenubarmenuChkbuttonValueSet();复选按钮状态值的设置ProMenubarmenuChkbuttonAdd()。