[CREO] Creo的二次开发配置

阿尔法2018 发表于 2019-08-21 00:50 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
ProE/Creo Parametric TOOLKIT 二次开发环境推荐设置(上)

一、ProE/Creo与IDE选择
IDE(Integrated Development Environment):集成开发环境,是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。
VS(Microsoft Visual Studio):是微软发布的一个很完整的开发工具集,包含很多高级语言的开发环境,VC只是VS其中的一个开发环境。
VC(Microsoft Visual C++):是微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。
ProE或Creo低版本上开发的插件一般可以在高版本上运行,或将源代码经过少量修改,然后在高版本上编译后即可在高版本上运行,高版本上开发的插件不可以在低版本上运行。

二、创建MFC DLL项目(Visual Studio 2012+Creo3.0 M140)

1. 启动Visual Studio 2012>文件>新建>项目>模板>Visual C++>MFC>MFC DLL>填写项目“名称(N)”>选择项目文件存放“位置(L)”>“确定”
DLL (Dynamic Link Library):动态链接库文件,又称“应用程序拓展”,是一种软件文件类型。
DLL模式:进程内模式,Pro/TOOLKIT插件与ProE或Creo程序之间的信息交换通过直接函数调用的形式完成,插件与程序无缝集成,推荐使用的一种方式。
EXE模型:多进程模式,插件被编译为可执行程序,这个插件程序将是ProE或Creo程序的衍生,并作为主程序的一个子进程来运行。

2. “下一步>”

3. DLL类型:选择“带静态链接MFC 的规则 DLL(R)”>“完成”
使用共享MFC DLL的规则DLL(D):编译后的DLL程序文件中不包含MFC的库,DLL程序文件稍小一些,当发布该程序时,如果对方的机器上没有安装对应版本的MFC的库,那么该DLL程序无法运行。
带静态链接MFC 的规则 DLL(R):编译后的DLL程序文件中包含MFC的库,DLL程序文件稍大一些,当发布该程序时,即使对方电脑即使没有安装对应版本的MFC的库,那么该DLL程序也可以运行。
第一种与第二种类型对于Pro/TOOLKIT插件程序文件大小影响不大,推荐使用第二种类型。

三、项目属性设置

1. 新建x64平台
现在用户安装的ProE或Creo大多是64位版本,所以开发时建议开发64位平台的插件程序,具体还是要以用户安装的程序平台位数来定。
Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息。
Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。Release模式下生成一个文件.exe或.dll文件(调试信息可在单独的PDB文件中生成)。
建议开发调试的时候使用Debug模式,方便插入断点和捕捉变量值,发布的时候使用Release模式,在创建项目的时候可以将两种方式都配置好,以供后续选择。


2. 常规设置
输出目录:插件DLL程序文件生成的目录,对x64平台建议使用“..\bin\\x86e_win64\”,对x86平台建议使用“..\bin\i486_nt\”。
中间目录:插件程序编译链接是产生的中间文件的目录。
平台工具集:当电脑中安装有多个版本的平台工具集时,可修改当前项目使用的平台工具集,平台共计集的选择请参照【表格1】。
MFC的使用:当新建MFC DLL项目时,如果DLL类型选择“使用共享MFC DLL的规则DLL(D)”,那么此处显示“在共享 DLL 中使用 MFC”;如果DLL类型选择“带静态链接MFC 的规则 DLL(R)”,那么此处显示“在静态库中使用 MFC”。也可在此处修改DLL类型,推荐使用“在静态库中使用 MFC”。
字符集:可以选择“使用 Unicode 字符集”或“使用多字节字符集”,PTC官方推荐选择“使用 Unicode 字符集”。


3. VC++目录
对于x64平台和x86平台,包含目录一样,库目录有所不同。
x64平台:
包含目录:D:\PTC\Creo 3.0\M140\CommonFiles\protoolkit\includes
库目录:D:\PTC\Creo 3.0\M140\CommonFiles\protoolkit\\x86e_win64\obj
x86平台:
包含目录:D:\PTC\Creo 3.0\M140\CommonFiles\protoolkit\includes
库目录:D:\PTC\Creo 3.0\M140\CommonFiles\protoolkit\ i486_nt\obj


4. 预处理器定义
运行库选择“多线程 DLL (/MD)”或“多线程调试 DLL (/MDd)”时,添加:_AFXDLL,因为不推荐选择这两种方式,所以不采用这两种方式是不需要添加。
在插件DLL程序中用到头文件“ProMessage.h”中函数时,添加:PRO_USE_VAR_ARGS,一般都会使用该文件中的函数,默然是添加。


5. 运行库
对与Debug和Release模式,运行库的选择有所不同:
Debug模式:多线程调试 (/MTd),推荐。
Debug模式:多线程调试 DLL (/MDd),不推荐。
Release模式:多线程 (/MT),推荐。
Release模式:多线程 DLL (/MD) ,不推荐。
运行库:是程序在运行时所需要的库文件。通常运行库是以DLL的形式提供。

6. 附加依赖项
Creo版本不同,需要添加的库文件也有所不同,一般都需要添加的项有:
mpr.lib
psapi.lib
ws2_32.lib
netapi32.lib

Creo版本
库文件:(/MT)或(/MTd)
库文件:(/MD)或(/MDd)

ProE4.0
protk_dll.lib
protk_dllmd.lib

ProE5.0
protk_dll.lib
protk_dllmd.lib

Creo2.0
protk_dll.lib
protk_dllmd.lib

Creo3.0
protk_dll_NU.lib、ucore.lib、udata.lib
protk_dllmd.lib、ucore.lib、udata.lib

Creo4.0
protk_dll_NU.lib、ucore.lib、udata.lib
protk_dllmd_NU.lib、ucore.lib、udata.lib

Creo5.x.x.x
protk_dll_NU.lib、ucore.lib、udata.lib
protk_dllmd_NU.lib、ucore.lib、udata.lib

四、代码编辑
以下是该插件程序中,需要在文件“TkPlugin.cpp”中输入的代码:
  1. //头文件
  2. #include "ProMenubar.h"
  3. #include "ProMenu.h"
  4. #include "ProUtil.h"
  5. #include "ProMessage.h"
  6. //菜单状态
  7. static uiCmdAccessState AccessDefault(uiCmdAccessMode access_mode)
  8. {
  9. return(ACCESS_AVAILABLE);
  10. }
  11. //自定义函数
  12. void SayHello()
  13. {
  14. //消息文件
  15. ProFileName msg_file;
  16. ProStringToWstring(msg_file, "message.txt");
  17. //消息转换
  18. ProLine msg;
  19. ProMessageToBuffer(msg, msg_file, "Hello World");
  20. //显示消息
  21. AfxMessageBox(msg);
  22. }
  23. //入口函数
  24. extern "C" int user_initialize()
  25. {
  26. ProError status = PRO_TK_NO_ERROR;
  27. //菜单文件
  28. ProFileName menu_file;
  29. ProStringToWstring(menu_file,"menu.txt");
  30. //创建菜单
  31. status = ProMenubarMenuAdd("TkPluginMenu","TkPluginMenu","Help",PRO_B_TRUE,menu_file);
  32. //第一个命令
  33. uiCmdCmdId FirstCmd_Id;
  34. status = ProCmdActionAdd("FirstCmd_Act",(uiCmdCmdActFn)SayHello,uiCmdPrioDefault,
  35. AccessDefault,PRO_B_TRUE,PRO_B_TRUE,&FirstCmd_Id);
  36. status = ProMenubarmenuPushbuttonAdd("TkPluginMenu","FirstCmd","FirstCmd",
  37. "This button will show a message",NULL,PRO_B_TRUE,FirstCmd_Id,menu_file);
  38. status = ProCmdIconSet(FirstCmd_Id,"FirstCmd.gif");
  39. //返回值
  40. return (0);
  41. }
  42. //出口函数
  43. extern "C" void user_terminate()
  44. {
  45. AFX_MANAGE_STATE(AfxGetStaticModuleState());
  46. }
复制代码


  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- 距米网 |苏公网安备32041102000587号

© 2017-2024 常州居居米智能技术有限公司 苏ICP备18040927号-1