您的位置:网站首页 > Proe教程

通过“Hello World”来掌握ProE二次开发

时间:2011-02-24 09:39:31 来源:

  本文介绍了通过“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