本文介绍了通过“Hello World”来掌握ProE二次开发的一些经验。
如同各种开发语言的学习一样,我们也从“ Hello World ”开始 Pro/Engineer 的二次开发的学习。通过这个小程序我们将对基于 Pro/TOOLKIT 的 Pro/Engineer 二次开发有一个感性的认识,同时熟悉基于 Pro/TOOLKIT 的 Pro/Engineer 二次开发的开发流程。该程序的主要功能是在 Pro/Engineer 的当前窗口中显示“ Hello World ”欢迎信息。在开始学习之前要说一下,本系列主要是以 C 语言开发为主,所以我们假设您有一定的 C 语言基础了。
一、 系统要求和软件安装
Pro/TOOLKIT 是 Pro/Engineer 系统的客户化开发工具包,即应用程序接口( API )。它提供了大量的 C 语言库函数,能够使外部应用程序(客户应用程序)安全有效地访问 Pro/Engineer 的数据库和应用程序。通过 C 语言编程及应用程序与 Pro/Engineer 系统的无缝集成,客户和第三方能够在 Pro/Engineer 系统中添加所需地功能。
想要利用 Pro/TOOLKIT 进行 Pro/Engineer 二次开发,首先必须正确安装 Pro/TOOLKIT ,所以下面先介绍如何安装 Pro/TOOLKIT ,然后再介绍如何测试 Pro/TOOLKIT 是否已经安装成功。
1. 1 Pro/TOOLKIT 的安装
安装 Pro/Engineer 的时候,在选择安装组件步骤,打开组件 API Toolkits ,选中 Pro/TOOLKIT 选项,如图 所示, Pro/TOOLKIT 就会随着 Pro/Engineer 一起安装在用户的机器上。
1 . 2 测试 Pro/TOOLKIT
当安装完 Pro/TOOLKIT 后,应该马上通过编译、连接和运行一个简单的 Pro/TOOLKIT 程序来检验 Pro/TOOLKIT 是否安装成功,以免给后面的开发工作带来不必要的麻烦。
Pro/TOOLKIT 软件包提供了一个简单的测试程序 pt_install_test, 下面通过此程序叙述测试过程。
1. 编译和连接
根据 Pro/TOOLKIT 提供的 Makefile 文件“ make_install ”进行编译和连接。此文件位于 ( Pro/Engineer 的安装目录) protoolkitprotk_appls 目录下。
有两种编译方法,一种方法是采用 MS-DOS 方式,利用 MS-DOS 方式进行编译步骤如下:
(1) 将 protoolkitobj 目录下的 make_install 文件拷贝至一个新的目录下,假设拷贝至 D: est 目录下。
(2) 用写字板打开 make_install 文件,修改下列区域的语句:
# Pro/Toolkit Source & Machine Loadpoint (EXTERNAL USE_DEFAULT)
PROTOOL_SRC = ../..
PROTOOL_SYS = $(PROTOOL_SRC)/$(PRO_MACHINE_TYPE)
将 PROTOOL_SRC 改为本机 Pro/TOOLKIT 的安装路径,例如:
PROTOOL_SRC = D:PTCproewildfireprotoolkit
修改后保存文件。
(3) 打开 MS_DOS 命令提示符,设置 MS_DOS 状态下的编译环境为运行 VC 6.0 的 vcvars32.bat 程序。
(4) 在 MS_DOS 命令提示符中输入以下语句:
nmake –f make_install
就开始根据 make_install 文件进行编译、连接,最后生成可执行文件 pt_install_test.exe。
另一种编译方法是在VC 环境中进行编译,首先将文件 make_install 改名为make_install.mak ,然后利用VC开发环境打开此文件,生成 VC 工程项目文件,然后执行 Build 命令编译连接,最后生成一名为 pt_install_test.exe 的文件。
两种方法最后生成的 pt_install_test.exe 文件完全一样,只是这两种方法的调试环境不同,一般推荐采用 VC 开发环境作为调试方法,主要是因为在 VC 调试环境下可以反复修改源程序。
2 . 注册
在此工作目录下,建立一个注册文件 protk.dat 文件。注册文件是一个专门用来告知 Pro/ENGINEER 系统应用程序相关信息的文件,以便 Pro/ENGINEER 系统能够识别并执行我们的 Pro/TOOLKIT 应用程序。
此 protk.dat 文件的内容如下:
name install_test
exec_file D: estpt_install_test.exe
text_dir D:PTCproewildfireprotoolkitprotk_appls
pt_install_test ext
revision 24
end
3 . 程序的执行
以包含上面的 protk.dat 文件的目录为启动目录启动 Pro/ENGINEER 系统, Pro/ENGINEER 将启动应用程序 pt_install_test 。 当该程序正确执行时,在 Pro/ENGINEER 系统的 File 菜单下会增添一个新的命令 -Install Test 。
当用户单击此命令时,就会在 Pro/ENGINEER 窗口中弹出一个对话框,在该对话框中显示出“ The Pro/TOOLKIT Installation Test succeeded ”的信息。
4 . 以 DLL 方式重新测试此程序
以 DLL 方式编译和连接此应用程序, make_install 文件无需修改,只是在 MS-DOS 命令提示符中输入的是:
nmake –f make_install dll
完成编译和连接后,会生成一动态连接库文件 pt_install_test.dll 。
在注册此应用程序时,需要对 protk.dat 文件进行如下修改:
name install_test
startup dll
exec_file D: estpt_install_test.dll
text_dir D:PTCproewildfireprotoolkitprotk_applspt_install_test ext
revision 24
end
所做的修改是在此文件的第二行加入了一句“ startup dll ”,表示此程序以 dll 方式启动。
程序注册后,在包含 protk.dat 的目录下启动 Pro/ENGINEER ,程序执行结果同 1.2.2 节的第 3 小节中的结果完全一样。
二、“ Hello World ”的编写与编译
2. 1 编写源文件
源文件包括资源文件和程序源文件:资源文件包括菜单资源文件、窗口信息资源文件、对话框资源文件(分别用来完成创建和修改 Pro/ENGINEER 菜单、窗口信息和对话框等功能)等;程序源文件指我们所要编写的 C 语言程序,它是整个 Pro/TOOLKIT 程序开发的核心部分。
“ Hello World ”程序非常简单,其功能只是在 Pro/ENGINEER 窗口内显示欢迎信息,没有对菜单资源等进行的修改,所以此程序没有资源文件。该程序的程序源代码如下:
/* hello_world.c */
// 头文件包含
#include "ProToolkit.h"
#include "ProGraphics.h"
/* 函数: int user_initialize */
/* 功能:用户初始化函数 */
int user_initialize(int argc, char *argv[])
{
// 函数声明
int hello_function();
// 调用函数 hello_function
hello_function();
return (0);
}
/* 函数: user_terminate */
/* 功能:用户结束中断函数 */
void user_terminate()
{
printf("Pro/Toolkit application terminated successfully ");
return ;
}
/* 函数: hello_function */
/* 功能:显示出“ Hello World ”欢迎信息 */
int hello_function()
{
wchar_t wtext[64];
double pt[3];
pt[0] = 150.0;
pt[1] = 375.0;
/* 设置变量 wtext 内容为“ Hello World ” */
ProStringToWstring(wtext, "Hello World");
/* 显示出“ Hello World ”信息 */
ProGraphicsTextDisplay(pt, wtext);
return (0);
}
这个程序是非常简单的,但从中可以看出 Pro/TOOLKIT 程序的基本结构。整个程序由文件包含部分、用户初始化函数 user_initialize() 和用户结束中断函数 user_terminate() 组成。关于用户初始化函数 user_initialize() 和用户结束中断函数 user_terminate() 的作用以及具体用法,我将会在后续的文章中进行介绍。
2 . 2 程序的编译和连接
为了编译连接所编制的程序代码,一般需要制作 Makefile 工程文件,可以根据 Pro/TOOLKIT 自带的 Makefile 修改。该文件主要指定库文件、头文件、源文件的位置及要生成的可执行文件和动态连接库名称等。也就是说,此文件是用来说明如何进行应用程序编译和连接的,当然也可以在 VC++6.0 环境中指定上述各种项目。
“ Hello World ”程序的 Makefile 文件 make_hello 内容如下:
// 文件开始
# File Name // 定义 make 文件名称
MAKEFILENAME = make_hello
# Machine Type // 定义机器类型
PRO_MACHINE_TYPE = i486_nt
# Executable names // 定义生成的执行文件
EXE = hello.exe
EXE_DLL = hello.dll
# Pro/Toolkit Source & Machine Loadpoint (EXTERNAL USE - DEFAULT) // 定义 # Pro/Toolkit 安装根目录
PTC_DIR = D:PTCproeWildfire
PROTOOL_SRC = $(PTC_DIR)/protoolkit
PROTOOL_SYS = $(PROTOOL_SRC)/$(PRO_MACHINE_TYPE)
PRODEV_SRC = $(PTC_DIR)/prodevelop
PRODEV_SYS = $(PRODEV_SRC)/$(PRO_MACHINE_TYPE)
# Pro/Toolkit Source & Machine Loadpoint (PTC INTERNAL USE)
#PROTOOL_SRC = $(PTCSRC)/protoolkit
#PROTOOL_SYS = $(PTCSYS)
#PRODEV_SRC = $(PTCSRC)/prodevelop
#PRODEV_SYS = $(PTCSYS)
# Include File Paths
INCS = -I. -I$(PROTOOL_SRC)/protk_appls/includes -I$(PROTOOL_SRC)/includes
-I$(PRODEV_SRC)/includes
# Compiler Flags // 定义编译特征值
CC = cl
MACH = -DPRO_MACHINE=29 -DPRO_OS=4
CCFLAGS = -Dhypot=_hypot -DMSB_LEFT -Dfar=ptc_far -Dhuge=p_huge -Dnear=p_near -c -W2 -G4 -Za -D_X86_=1 -D_WSTDIO_DEFINED
CFLAGS = $(CCFLAGS) $(INCS) $(MACH)
# Libraries // 定义库文件路径
PTCLIBS = $(PRODEV_SYS)/obj/prodevelop.lib $(PROTOOL_SYS)/obj/protoolkit.lib
PTCLIBS_DLL = $(PRODEV_SYS)/obj/prodev_dll.lib $(PROTOOL_SYS)/obj/protk_dll.lib
LIBS = libc.lib kernel32.lib user32.lib wsock32.lib advapi32.lib mpr.lib winspool.lib
# Object files // 定义目标文件
OBJS = hello.obj
# Linker // 编译器
LINK = link
$(EXE) : $(OBJS) $(PTCLIBS)
@echo Start at `date`
@echo PROTOOL_SRC = $(PROTOOL_SRC)
@echo PROTOOL_SYS = $(PROTOOL_SYS)
$(LINK) /subsystem:console -out:$(EXE) /debug:none /debugtype:coff /machine:i386 @<
$(OBJS) $(PTCLIBS) $(LIBS)
<<
@echo Finished at `date`
del $(OBJS)
# Dll target // 定义 dll 文件
dll: $(EXE_DLL)
$(EXE_DLL) : $(OBJS) $(PTCLIBS_DLL)
@echo Start at `date`
@echo PROTOOL_SRC = $(PROTOOL_SRC)
@echo PROTOOL_SYS = $(PROTOOL_SYS)
$(LINK) /subsystem:console -out:$(EXE_DLL) /debug:none /debugtype:coff /machine:i386 /dll @<
$(OBJS) $(PTCLIBS_DLL) $(LIBS)
<<
@echo Finished at `date`
del $(OBJS)
# object dependencies // 定义目标文件依附关系
PROTK_APPLS = D:protoolkit-workhello_word
hello.obj: $(PROTK_APPLS)/hello.c
$(CC) $(CFLAGS) $(PROTK_APPLS)/hello.c
clean :
del $(OBJS)
del $(EXE)
nmake -f $(MAKEFILENAME)
clean_dll :
del $(OBJS)
del $(EXE_DLL)
nmake -f $(MAKEFILENAME) dll
// 文件结束
有关 make 文件的格式及改写也将在以后的文章中给于详细的介绍。修改完成后将此 make_hello 文件改名为 make_hello.mak ,打开 VC++6.0 的 File 主菜单,单击 Open Workspace 按钮,在打开的 Open Workspace 对话框中将文件类型改为 Makefiles(mak) ,打开文件 make_hello.mak 。 VC++6.0 就会根据 make_hello.mak 文件生成一个工程文件,编译连接该工程,生成 hello.dll 文件。
2 . 3 应用程序的注册
要使应用程序能够集成到 Pro/ENGINEER 系统中运行,必须制作一个扩展名为 .dat 的注册文件,用该文件进行应用程序的注册。
“ Hello World ”程序的注册文件为 protk.dat ,假设放在 Pro/ENGINEER 启动目录下,文件内容如下:
name hello
startup dll
exec_file D: workhello hello.dll
text_dir text
allow_stop true
revision 24
end
在含有 protk.dat 文件的目录下启动 Pro/ENGINEER ,“ Hello World ”应用程序会自动执行,执行结果为在 Pro/ENGINEER 图形窗口内显示出“ Hello World ”欢迎信息。
OK !在这里我们已经完成了第一个 Pro/TOOLKIT 应用程序“ Hello World ”的全部开发。怎么样?看着自己的成果是不是有点想飘的感觉,原来一直只是在琢磨 PTC 还有什么,现在我们可以自己来改变它了!千万不要现在就飘呀!以后的会更精彩! o_o
相关文章
- 2021-09-08BIM技术丛书Revit软件应用系列Autodesk Revit族详解 [
- 2021-09-08全国专业技术人员计算机应用能力考试用书 AutoCAD2004
- 2021-09-08EXCEL在工作中的应用 制表、数据处理及宏应用PDF下载
- 2021-08-30从零开始AutoCAD 2014中文版机械制图基础培训教程 [李
- 2021-08-30从零开始AutoCAD 2014中文版建筑制图基础培训教程 [朱
- 2021-08-30电气CAD实例教程AutoCAD 2010中文版 [左昉 等编著] 20
- 2021-08-30电影风暴2:Maya影像实拍与三维合成攻略PDF下载
- 2021-08-30高等院校艺术设计案例教程中文版AutoCAD 建筑设计案例
- 2021-08-29环境艺术制图AutoCAD [徐幼光 编著] 2013年PDF下载
- 2021-08-29机械AutoCAD 项目教程 第3版 [缪希伟 主编] 2012年PDF