前言

本教程采用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 — 获取当前模型的名称并显示。

五、编译程序

  1. 选择需要编译Win32还是x64版本,以及Debug还是Release版本。
  2. 单击【生成】->【生成解决方案】即可编译生成DLL文件:test_wf5.dll。
    注意:如果你的VS2008没有安装SP1补丁,编译Debug版本时常会报错,即使编译成功,Pro/E也无法加载生成的test_wf5.dll。

手把手教你开发Pro/TOOLKIT应用程序(一)相关推荐

  1. 怎么编写java_程序员学编程第一步:手把手教你开发第一个Java程序

    想必大家已经对Java语言有了初步的认识,对Java的发展历程.运行原理和环境安装有了一定的了解.在本文中,我们继续来学习Java的详细语法与开发规范,教大家用Java编写出简单的程序. 2.1 开发 ...

  2. 手把手教你开发人工智能微信小程序(1):Hello WeChat!

    每个开始学习编程的程序员,大约是从"Hello World!"开始的吧.就这样一个简简单单在屏幕上输出"Hello World!"字样的程序,帮助我们进入编程世 ...

  3. 手把手教你开发人工智能微信小程序(1):线性回归模型

    谈到人工智能.机器学习,我们可能会觉得很神秘,其实机器学习背后的理论并不复杂.就如同原子弹这么尖端的科技,其背后的理论就是一个很简单的公式: E = mc² 机器学习的最基础理论其实也不复杂,本文先尝 ...

  4. java 注册探探账号_零基础手把手教你开发探探类社交软件Tinder

    原标题:零基础手把手教你开发探探类社交软件Tinder 目录介绍 1.关于项目App整体架构 1.1项目整体架构 1.1.1 目前项目使用架构 1.1.2 目前常见的架构 1.1.3 MVP架构优点及 ...

  5. 手把手教你开发photoshop面板插件(附demo和工具)

    手把手教你开发photoshop面板插件(附demo和工具) 一.前言 二.插件演示 三.目录文件介绍 3.1 插件安装 3.2 开启ps开发模式 3.3 插件文件介绍 3.4 manifest 文件 ...

  6. 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之二接口

    前言 阅读前请按照顺序参看系列文章,效果更佳! Vue中路由到一个公共组件,然后根据路径中是否存在文件动态加载组件 解放前端工程师--手把手教你开发自己的自定义列表和自定义表单系列之一缘起 据说系列文 ...

  7. 手把手教你开发IOT设备

    手把手教你开发IOT设备 1.概述 IOT设备的开发是基于rt-thread rtos实现.rt-thread是一个国产RTOS,它是一个RTOS,但又不仅仅是RTOS,支持大量的芯片,驱动,还包含大 ...

  8. 手把手教你写个微信小程序

    手把手教你写个微信小程序 很多人看完bmob快速入门,并完成了bmob的基本配置之后依然不知道如何下手去写自己的代码,那么跟着我一起来一步一步做个小程序吧. 工具:Bmob后端云 新建小程序项目 一. ...

  9. 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 参考地址为:手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单

最新文章

  1. 【React Native】iOS原生导航跳转RN页面
  2. 常用模块和面向对象 类
  3. Java黑皮书课后题第5章:*5.15(显示ASCII码字符表)编写一个程序,打印ASCII字符表从‘!‘到‘~‘的字符。每行打印10个字符。ASCII码表如附录B所示。数字之间用一个空格字符隔开
  4. 全国计算机等级考试题库二级C操作题100套(第58套)
  5. 【移植驱动到Linux3.4.2内核之一】移植DM9000C网卡驱动
  6. vue 过滤器 filters
  7. into outfile 生成sql脚本
  8. vrPlus之ARView教程,可实现zView效果,无需二次开发
  9. Unity3d 联通沃商店接入问题
  10. 为什么 MySQL 不建议执行超过 3 表以上的多表关联查询?
  11. 随手记录导入导出功能
  12. 158 Linux中断基础概念
  13. 2022爱分析・数据库厂商全景报告 | 爱分析报告
  14. vivado 2021.2下载安装兼容的matlab
  15. “我那个工资5000的朋友,一年存了20万”
  16. JS一个元素怎么绑定多个事件
  17. 三维导航,快速三维立体查看CAD图纸
  18. MySQL-SQL语句命令
  19. 国家的崛起,无法建立局域网连接
  20. OSK VFS read数据流分析

热门文章

  1. python使用虚拟内存_虚拟内存、物理内存
  2. 对测绘软件南方CASS的使用感想
  3. U盘/移动硬盘安装CentOS系列系统
  4. Highcharts Stock内置的技术指标
  5. 【软件质量】软件安全性
  6. wxpython查询功能_wxpython程序基本功能源码整理,包括基本文字,输入框,字体设置,按钮绑定事件触发...
  7. SASE部署及应用场景探讨
  8. 程序员的沟通技巧-耗子叔
  9. masquerade词根词缀_GRE填空题-同向逻辑和词汇记忆法
  10. vue 回车查询 按钮_vue之在页面中监听键盘的Enter键来触发某个按钮事件