图4-4 库文件路径设置
选择Project/Settings...菜单,选择“Link”选项卡,在“Category:”下拉列表中选择General,在“Object/Library modules”下加入mpr.lib protk_dll.lib两个库文件,并且去掉“Generate debug into”和“Link incrementaily”两个选项。具体设置如图4-5。
图4-5 库文件设置
在菜单Project/Settings的“Link”选项页中选择Category下拉列表中的“Customize”设置强制文件输出,即选中“Force file output”的复选框,如图4-6所示。
由protk_dll.lib及LIBC.lib产生的unresolved external symbol连接
第 18 页 共 72 页
错误均可忽略,并可生成在Pro/ENGINEER系统正常运行的Pro/TOOLKIT应用程序。由于连接protk_dll.lib及LIBC.lib库产生的错误有31个,警告有19个。
在“Project Settings”中的“C/C++”选项页中选择“Generate browse info”复选框,并且在“Debug info:”下拉列表中选择“None”,具体设置如图4-7。
图4-6 强制输出设置
图4-7 语言设置
在“Project Settings”中选择General选项,将“Output directories”输出目录改为“Release”,这样VC创建的DLL文件将存放入“Release”文件夹中,设置如图4-8所示。
第 19 页 共 72 页
图4-8 输出路径设置
对Visual C++6.0进行相关设置后,便可以编写程序了。 图4-2菜单对应源程序代码见附录Ⅲ菜单操作源程序部分。 首先,必须列出VC程序将用到的相关头文件,如 #include\#include\#include\#include
其次,必须对用到的函数进行声明,否则将会出错,如 int Spring1Fn(); int Spring2Fn(); int Spring3Fn(); int Spring4Fn(); int Spring5Fn(); int Spring6Fn(); int Spring7Fn();
static uiCmdAccessState AccessAvailable (uiCmdAccessMode); 最后才编写程序主体部分。
下面介绍说明菜单程序中用到的Pro/TOOLKIT函数。
user_initializ()函数是Pro/TOOLKIT应用程序的初始化函数,主要用来对同步模式的Pro/TOOLKIT应用程序进行初始化,任何同步模式的应用程序要在Pro/ENGINEER系统中加载都必须包含该函数。其格式如上程序所示。
user_terminate()函数在Pro/ENGINEER终止同步模式的Pro/TOOLKIT应用
第 20 页 共 72 页
程序时调用(如退出Pro/ENGINEER将终止应用程序的运行),该函数由用户定义,其中可以不执行任何动作。
ProMenubarMenuAdd()函数的作用是向Pro/ENGINEER添加所需的菜单,包含头文件为:#include
ProMenubarMenuAdd (\ \
其中\为菜单项名,作为调用其他菜单函数的输入参数;
\为菜单标签名,即该菜单条的关键字。必须与信息文件该 段的标识关键字相同。\PRO_B_TRUE表示该菜单加在“工 具”菜单的右侧。MsgFile为菜单信息文件名,这里定为\。
ProMenubarmenuMenuAdd()函数的作用是向菜单添加下级子菜单。注意,在生成的下级子菜单中必须至少包含一项菜单项,否则将不显示下级子菜单。该函数可以创建多层下级子菜单,只需用不同层次的菜单名标识作为们菜单名即可。其函数如下:
ProMenubarmenuMenuAdd(\ NULL, PRO_B_TRUE, MsgFile)
\表示这个下级菜单是挂接在此菜单项名下。\为菜单标签名,必须与信息文件中对应标识关键字相同。
ProCmdActionAdd()函数的作用是设置菜单按钮的动作函数。其函数如下: ProCmdActionAdd(\ uiCmdPrioDefault,AccessAvailable, 应动作。
ProMenubarmenuPushbuttonAdd()函数的作用是添加菜单按钮。其函数如下:
ProMenubarmenuPushbuttonAdd(\ \ PRO_B_TRUE, PushButton_cmd_id1, MsgFile)
\表示此菜单是菜单名为“SubMenu1”的下级子菜单,\是菜单标签名,与信息文件中对应一致。\a push button to the ProE menu bar\是提示信息,必须与信息文件中一致。
程序中用到了菜单条、菜单条菜单、下级子菜单、菜单按钮等。
PRO_B_TRUE,PRO_B_TRUE,&PushButton_cmd_id1)
Spring1Fn为该按钮的动作函数,即当单击此按钮,便调用此函数,产生相
第 21 页 共 72 页
将上面编辑的资源信息文件放入“Text\\Release\\text\\chinese_cn”文件夹内。
4.1.3 注册运行
编写调试完应用程序后,将整个VC工程文件拷贝到工作目录下,用记事本编写注册文件,并保存为“Protk.dat”。注册文件内容如图4-9所示。
图4-9 注册文件
这里的“.\\”代表相对路径方式,即起始目录为Pro/ENGINEER的工作目录。用相对路径方式的优点在于具有可移植性。即此二次开发程序只要存放在Pro/ENGINEER设置的工作目录下,便能自动运行,而不要求用户更改设置,大大地方便了用户的使用。
图4-9中各字段及其意义如表4-1所示。
表4-1 注册表字段及意义
字段名 Name Exec_file Text_dir Startup 意义 外部程序标识名,该标识名不一定要与可执行程序名相同 可执行程序名(包括路径) 指定外部程序的text目录树的全路径 这里取dll(动态连接库) Allow_stop 如设为TRUE,在Pro/ENGINEER工作时可以终止应用程序,如设为FALSE则不能终止应用程序 Delay_start 若设为TRUE, Pro/ENGINEER在启动时不调用Pro/TOOLKIT应用程序,但可以手工启动,若设为FALSE,则系统将自动启动。 Revision End 指定Pro/TOOLKIT版本号 段结束标志 第 22 页 共 72 页