从“hello world”开始学pro/engineer二次开发

如同各种开发语言的学习一样,我们也从“ 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 选项,如图 1 所示, Pro/TOOLKIT 就会随着 Pro/Engineer 一起安装在用户的机器上。

图 1

1 . 2 测试 Pro/TOOLKIT

当安装完 Pro/TOOLKIT 后,应该马上通过编译、连接和运行一个简单的 Pro/TOOLKIT 程序来检验 Pro/TOOLKIT 是否安装成功,以免给后面的开发工作带来不必要的麻烦。

Pro/TOOLKIT 软件包提供了一个简单的测试程序 pt_install_test, 下面通过此程序叙述测试过程。

1. 编译和连接

根据 Pro/TOOLKIT 提供的 Makefile 文件“ make_install ”进行编译和连接。此文件位于 <tk_loadpoint> ( Pro/Engineer 的安装目录) \protoolkit\protk_appls\ 目录下。

有两种编译方法,一种方法是采用 MS-DOS 方式,利用 MS-DOS 方式进行编译步骤如下:

(1) 将 <tk_loadpoint>\protoolkit\<machine>\obj 目录下的 make_install 文件拷贝至一个新的目录下,假设拷贝至 D:\test 目录下。

(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:\PTC\proewildfire\protoolkit

修改后保存文件。

(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:\test\pt_install_test.exe

text_dir D:\PTC\proewildfire\protoolkit\protk_appls\

pt_install_test\text

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:\test\pt_install_test.dll

text_dir D:\PTC\proewildfire\protoolkit\protk_appls\pt_install_test\text\

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\n");

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:\PTC\proeWildfire

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 @<<longline.list

$(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 @<<longline.list

$(OBJS) $(PTCLIBS_DLL) $(LIBS)

<<

@echo Finished at `date`

del $(OBJS)

# object dependencies // 定义目标文件依附关系

PROTK_APPLS = D:\protoolkit-work\hello_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:\ work\hello \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 还有什么,现在我们可以自己来改变它了!千万不要现在就飘呀!以后的会更精彩!


标签:hello  world 开始 pro/engineer 开发