手把手教你开发Pro/TOOLKIT应用程序(一)
前言
本教程采用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 + V
S2010。
一、准备
1.Pro/TOOLKIT
在安装Pro/E时,默认是不安装Pro/TOOLKIT的,必须选中【API工具包】节点下的Pro/T
OOLKIT选项。
可以通过运行:[Pro/E安装目录]/bin/ptcsetup.bat 查看有无安装Pro/TOOLKIT。
2.VS2008
最好安装下VS2008 SP1补丁,否则编译Debug版本时常会报错。
如果你需要开发64位的Pro/TOOLKIT程序,请确保安装X64 Compilers and Tools,如下
图所示:
二、新建工程
点击【文件】->【新建】->【项目】菜单命令,创建MFC DLL工程。
输入工程名称:test_wf5。
单击【确定】,然后在弹出的对话框中单击【下一步 >】
DLL类型:使用共享 MFC DLL
单击【完成】完成创建工程。
三、配置工程属性
1.新增64位编译平台
注意:如果只编译32位程序,请跳过此步骤。
单击【生成】->【配置管理器】菜单命令,然后依照下图操作。
如果没有x64选项,那说明安装VS2008时,没有安装X64 Compilers and Tools,重新安
装此选项即可。
2.新增头文件路径
单击【项目】->【属性】菜单命令,添加如下头文件路径。
【Pro/E安装目录】\prodevelop\includes
【Pro/E安装目录】\protoolkit\includes
注意:请先选择平台是Win32还是x64。
3.新增库文件路径
- 32位:
【Pro/E安装目录】\prodevelop\i486_nt\obj
【Pro/E安装目录】\protoolkit\i486_nt\obj
- 64位:
【Pro/E安装目录】\prodevelop\x86e_win64\obj
【Pro/E安装目录】\protoolkit\x86e_win64\obj
4.添加附加依赖项
mpr.lib
wsock32.lib
psapi.lib
protk_dllmd.lib
prodev_dllmd.lib
netapi32.lib
5.设置工程字符集
推荐优先采用Unicode。
四、添加Pro/TOOLKIT代码
在test_wf5.cpp文件的最后添加以下Pro/TOOLKIT代码。
该段代码的功能是:
在Pro/E的【帮助】菜单后新增一个菜单【TestMenu】,然后在【Te
stMenu】下新增两个菜单项【Test】和【ShowCurrModelName】。分别实现弹出测试
对话框和获取当前模型的名称并弹窗显示。
注意:先只要大体理解代码的整体思路即可,本教程会在第三篇:手把手教你开发Pro/TO
OLKIT应用程序(三) 中具体阐明代码的所有细节,在学习完本篇和第二篇后,再去学习第
三篇会比较好。
// 包含常用头文件
#include <ProToolkit.h>
#include <ProUtil.h>
#include <ProMenuBar.h>
#include <ProMenu.h>
#include <ProMode.h>
#include <ProMdl.h>
#include <ProSolid.h>
#include <ProAsmcomp.h>
#include <ProArray.h>
#include <ProModelitem.h>
#include <ProLayer.h>// 函数声明
uiCmdAccessState TestAccess(uiCmdAccessMode access_mode);
uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode);int Test(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data);
int ShowCurrModelName(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data);// Pro/TOOLKIT入口函数
extern "C" int user_initialize()
{ProError err;// 信息文件名称ProFamilyName MsgFile;ProStringToWstring(MsgFile, "Test_Msg.txt");// 添加菜单:TestMenuerr = ProMenubarMenuAdd("TestMenu", "TestMenu", "Help", PRO_B_TRUE, MsgFile);// 添加命令和菜单项// 测试命令uiCmdCmdId cmd_id1;err = ProCmdActionAdd("Test", Test, uiCmdPrioDefault, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &cmd_id1);err = ProMenubarmenuPushbuttonAdd("TestMenu", "Test", "Test", "Test_Help",NULL, PRO_B_TRUE, cmd_id1, MsgFile);// 显示并输出当前模型的名称uiCmdCmdId cmd_id2;err = ProCmdActionAdd("ShowCurrModelName", ShowCurrModelName, uiCmdPrioDefault, ShowCurrModelName_Access, PRO_B_FALSE, PRO_B_FALSE, &cmd_id2);err = ProMenubarmenuPushbuttonAdd("TestMenu", "ShowCurrModelName", "ShowCurrModelName", "ShowCurrModelName_Help", NULL, PRO_B_TRUE, cmd_id2, MsgFile);return 0;
}// Pro/TOOLKIT结束时调用的函数
extern "C" void user_terminate()
{
}// 测试命令响应函数
int Test(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data)
{AfxMessageBox(_T("Just For Test"));return 0;
}// 命令:获取当前模型的名称并显示
int ShowCurrModelName(uiCmdCmdId command,uiCmdValue *p_value,void *p_push_command_data)
{ProError err;// 获取当前模型ProMdl mdl;err = ProMdlCurrentGet(&mdl);if (PRO_TK_NO_ERROR != err){return -1;}// 获取当前模型名称并显示ProName name;err = ProMdlNameGet(mdl, name);MessageBoxW(NULL, name, L"wf5 test", MB_OK);return 0;
}// 测试命令 菜单权限函数
// 任何情况下菜单都有效
uiCmdAccessState TestAccess(uiCmdAccessMode access_mode)
{return ACCESS_AVAILABLE;/*ProError err;ProMode mode;err = ProModeCurrentGet(&mode);if (err != PRO_TK_NO_ERROR){return ACCESS_UNAVAILABLE;}if (mode == PRO_MODE_PART || mode == PRO_MODE_ASSEMBLY){return ACCESS_AVAILABLE;}else{return ACCESS_UNAVAILABLE;}*/
}// 获取当前模型名称并显示 菜单权限函数
// 只有在当前打开的模型为PART档,ASM档或Drawing档时菜单才有效
uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode)
{ProError err;ProMode mode;err = ProModeCurrentGet(&mode);if (PRO_TK_NO_ERROR != err){return ACCESS_UNAVAILABLE;}if (mode == PRO_MODE_PART || mode == PRO_MODE_ASSEMBLY|| mode == PRO_MODE_DRAWING){return ACCESS_AVAILABLE;}else{return ACCESS_UNAVAILABLE;}
}
代码说明:
1. user_initialize()为Pro/TOOLKIT应用程序的入口函数,每个Pro/TOOLKIT程序在被Pro/E加载时,首先执行此函数。
2. user_terminate()是Pro/TOOLKIT程序被Pro/E卸载时执行的函数。
3. ProMenubarMenuAdd为Pro/TOOLKIT程序添加菜单。
4. ProCmdActionAdd为Pro/TOOLKIT程序添加一个命令,一般在添加菜单项时会将命令和菜单项关联,这样在单击菜单项时,就会执行对应的命令。
5. ProMenubarmenuPushbuttonAdd为菜单添加菜单项。
6. 以上代码添加了两个命令:
test — 直接弹出测试对话框。
ShowCurrModelName — 获取当前模型的名称并显示。
五、编译程序
- 选择需要编译Win32还是x64版本,以及Debug还是Release版本。
- 单击【生成】->【生成解决方案】即可编译生成DLL文件:test_wf5.dll。
注意:如果你的VS2008没有安装SP1补丁,编译Debug版本时常会报错,即使编译成功,Pro/E也无法加载生成的test_wf5.dll。
手把手教你开发Pro/TOOLKIT应用程序(一)相关推荐
- 怎么编写java_程序员学编程第一步:手把手教你开发第一个Java程序
想必大家已经对Java语言有了初步的认识,对Java的发展历程.运行原理和环境安装有了一定的了解.在本文中,我们继续来学习Java的详细语法与开发规范,教大家用Java编写出简单的程序. 2.1 开发 ...
- 手把手教你开发人工智能微信小程序(1):Hello WeChat!
每个开始学习编程的程序员,大约是从"Hello World!"开始的吧.就这样一个简简单单在屏幕上输出"Hello World!"字样的程序,帮助我们进入编程世 ...
- 手把手教你开发人工智能微信小程序(1):线性回归模型
谈到人工智能.机器学习,我们可能会觉得很神秘,其实机器学习背后的理论并不复杂.就如同原子弹这么尖端的科技,其背后的理论就是一个很简单的公式: E = mc² 机器学习的最基础理论其实也不复杂,本文先尝 ...
- java 注册探探账号_零基础手把手教你开发探探类社交软件Tinder
原标题:零基础手把手教你开发探探类社交软件Tinder 目录介绍 1.关于项目App整体架构 1.1项目整体架构 1.1.1 目前项目使用架构 1.1.2 目前常见的架构 1.1.3 MVP架构优点及 ...
- 手把手教你开发photoshop面板插件(附demo和工具)
手把手教你开发photoshop面板插件(附demo和工具) 一.前言 二.插件演示 三.目录文件介绍 3.1 插件安装 3.2 开启ps开发模式 3.3 插件文件介绍 3.4 manifest 文件 ...
- 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之二接口
前言 阅读前请按照顺序参看系列文章,效果更佳! Vue中路由到一个公共组件,然后根据路径中是否存在文件动态加载组件 解放前端工程师--手把手教你开发自己的自定义列表和自定义表单系列之一缘起 据说系列文 ...
- 手把手教你开发IOT设备
手把手教你开发IOT设备 1.概述 IOT设备的开发是基于rt-thread rtos实现.rt-thread是一个国产RTOS,它是一个RTOS,但又不仅仅是RTOS,支持大量的芯片,驱动,还包含大 ...
- 手把手教你写个微信小程序
手把手教你写个微信小程序 很多人看完bmob快速入门,并完成了bmob的基本配置之后依然不知道如何下手去写自己的代码,那么跟着我一起来一步一步做个小程序吧. 工具:Bmob后端云 新建小程序项目 一. ...
- 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 参考地址为:手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
最新文章
- 【React Native】iOS原生导航跳转RN页面
- 常用模块和面向对象 类
- Java黑皮书课后题第5章:*5.15(显示ASCII码字符表)编写一个程序,打印ASCII字符表从‘!‘到‘~‘的字符。每行打印10个字符。ASCII码表如附录B所示。数字之间用一个空格字符隔开
- 全国计算机等级考试题库二级C操作题100套(第58套)
- 【移植驱动到Linux3.4.2内核之一】移植DM9000C网卡驱动
- vue 过滤器 filters
- into outfile 生成sql脚本
- vrPlus之ARView教程,可实现zView效果,无需二次开发
- Unity3d 联通沃商店接入问题
- 为什么 MySQL 不建议执行超过 3 表以上的多表关联查询?
- 随手记录导入导出功能
- 158 Linux中断基础概念
- 2022爱分析・数据库厂商全景报告 | 爱分析报告
- vivado 2021.2下载安装兼容的matlab
- “我那个工资5000的朋友,一年存了20万”
- JS一个元素怎么绑定多个事件
- 三维导航,快速三维立体查看CAD图纸
- MySQL-SQL语句命令
- 国家的崛起,无法建立局域网连接
- OSK VFS read数据流分析
热门文章
- python使用虚拟内存_虚拟内存、物理内存
- 对测绘软件南方CASS的使用感想
- U盘/移动硬盘安装CentOS系列系统
- Highcharts Stock内置的技术指标
- 【软件质量】软件安全性
- wxpython查询功能_wxpython程序基本功能源码整理,包括基本文字,输入框,字体设置,按钮绑定事件触发...
- SASE部署及应用场景探讨
- 程序员的沟通技巧-耗子叔
- masquerade词根词缀_GRE填空题-同向逻辑和词汇记忆法
- vue 回车查询 按钮_vue之在页面中监听键盘的Enter键来触发某个按钮事件