7z.exe不是有效的win32应用程序_教你开发Pro/TOOLKIT应用程序(一)

c9a300a72294303804b262cb3dbddbed.png

单击【确定】,然后在弹出的对话框中单击【下一步 >】

DLL类型:使用共享 MFC DLL单击【确定】,然后在弹出的对话框中单击【下一步 >】

DLL类型:使用共享 MFC DLL单击【确定】,然后在弹出的对话框中单击【下一步 >】

DLL类型:使用共享 MFC DLL

Pro/TOOLKIT是Pro/ENGINEER的一个应用程序接口(API),其编程语言是C 语言,它可以对Pro/ENGINEER进行功能扩展,满足PTC客户的特定需求。

Pro/TOOLKIT 是Pro/ENGINEER 软件系统自带的二次开发模块,可以直接访问Pro/ENGINEER 软件的最底层数据库资源,它几乎能够访问所有Pro/ENGINEER 的资源,可以说这是进行Pro/ENGINEER 二次开发最根本的方法。使用Pro/TOOLKIT进行二次开发,我们可以拓展Pro/ENGINEER的现有功能,定制企业需要的使用特性。

前言:

本教程采用VS2008 + Pro/E Wildfire5.0来讲解怎样开发Pro/TOOLKIT应用程序。

开发Pro/TOOLKIT应用程序时,Pro/E和Visual Studio的版本需对应,否则很难搭建开发环境,其对应关系如下:

* Wildfire 4.0 <> VS2008

* Wildfire 5.0 <> VS2008

* Creo 1.0 <> VS2010

* Creo 2.0 <> VS2010

本教程所述的方法完全适用于Wildfire4.0 + VS2008、Creo1.0 + VS2010、Creo2.0 + VS2010。

一、准备

1. Pro/TOOLKIT在安装Pro/E时,默认是不安装Pro/TOOLKIT的,必须选中【API工具包】节点下的Pro/TOOLKIT选项。

可以通过运行:[Pro/E安装目录]/bin/ptcsetup.bat 查看有无安装Pro/TOOLKIT。

df8608b720008f878cdf1b8c63d719ea.png

2. VS2008最好安装下VS2008 SP1补丁,否则编译Debug版本时常会报错。

如果你需要开发64位的Pro/TOOLKIT程序,请确保安装X64 Compilers and Tools,如下图所示:

4213b1160f4ce414d1e81b97ebbf9082.png

二、新建工程

72b6df71b8da3ac3d0361db0fb215d18.png

点击【文件】->【新建】->【项目】菜单命令,创建MFC DLL工程。

输入工程名称:test_wf5。

4213b1160f4ce414d1e81b97ebbf9082.png

5a05f31836ec473f8b7a0a7f9a003378.png

单击【确定】,然后在弹出的对话框中单击【下一步 >】

DLL类型:使用共享 MFC DLL

4748cb783bdbd896e2354a27891aa375.png

4748cb783bdbd896e2354a27891aa375.png

单击【完成】完成创建工程。

三、配置工程属性

72b6df71b8da3ac3d0361db0fb215d18.png

1. 新增64位编译平台

注意:如果只编译32位程序,请跳过此步骤。

单击【生成】->【配置管理器】菜单命令,然后依照下图操作。

d994c47dcccd25c6989ad984f78f333a.png

1d3fd88944d5e5b243f31e830d337078.png

如果没有x64选项,那说明安装VS2008时,没有安装X64 Compilers and Tools,重新安

装此选项即可。

2. 新增头文件路径

单击【项目】->【属性】菜单命令,添加如下头文件路径。

【Pro/E安装目录】prodevelopincludes

【Pro/E安装目录】protoolkitincludes

注意:请先选择平台是Win32还是x64。

ef0d72b60713977185e07f8b9470f617.png

3. 新增库文件路径

32位:

【Pro/E安装目录】prodevelopi486_ntobj

【Pro/E安装目录】protoolkiti486_ntobj

aff0b380e703d21bf53346cf883a0d2c.png

64位:

【Pro/E安装目录】prodevelopx86e_win64obj

【Pro/E安装目录】protoolkitx86e_win64obj

1ef1e9fb17d699ef46fe010438744edf.png

4. 添加附加依赖项

mpr.lib

wsock32.lib

psapi.lib

protk_dllmd.lib

prodev_dllmd.lib

netapi32.lib

ecb0ba86b18ab45fbe9c0b08a7d0d2f4.png

5. 设置工程字符集

推荐优先采用Unicode。

46f2af63eab7b8be74236d7b53e2ec84.png

四、添加Pro/TOOLKIT代码

72b6df71b8da3ac3d0361db0fb215d18.png

在test_wf5.cpp文件的最后添加以下Pro/TOOLKIT代码。

该段代码的功能是:

在Pro/E的【帮助】菜单后新增一个菜单【TestMenu】,然后在【TestMenu】下新增两个菜单项【Test】和【ShowCurrModelName】。分别实现弹出测试对话框和获取当前模型的名称并弹窗显示。

注意:先只要大体理解代码的整体思路即可,本教程会在第三篇:手把手教你开发Pro/TOOLKIT应用程序(三) 中具体阐明代码的所有细节,在学习完本篇和第二篇后,再去学习第三篇会比较好。

// 包含常用头文件

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

// 函数声明

uiCmdAccessState TestAccess(uiCmdAccessMode access_mode);

uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode);

int Test(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data);

int ShowCurrModelName(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data);

// Pro/TOOLKIT入口函数

extern "C" int user_initialize()

{

ProError err;

// 信息文件名称

ProFamilyName MsgFile;

ProStringToWstring(MsgFile, "Test_Msg.txt");

// 添加菜单:TestMenu

err = ProMenubarMenuAdd("TestMenu", "TestMenu", "Help", PRO_B_TRUE, MsgFile);

// 添加命令和菜单项

// 测试命令

uiCmdCmdId cmd_id1;

err = ProCmdActionAdd("Test", Test, uiCmdPrioDefault, TestAccess,

PRO_B_FALSE, PRO_B_FALSE, &cmd_id1);

err = ProMenubarmenuPushbuttonAdd("TestMenu", "Test", "Test", "Test_Help",

NULL, PRO_B_TRUE, cmd_id1, MsgFile);

// 显示并输出当前模型的名称

uiCmdCmdId cmd_id2;

err = ProCmdActionAdd("ShowCurrModelName", ShowCurrModelName, uiCmdPrioDefault,

ShowCurrModelName_Access,

PRO_B_FALSE, PRO_B_FALSE, &cmd_id2);

err = ProMenubarmenuPushbuttonAdd("TestMenu", "ShowCurrModelName", "ShowCurrModelName",

"ShowCurrModelName_Help", NULL, PRO_B_TRUE, cmd_id2, MsgFile);

return 0;

}

// Pro/TOOLKIT结束时调用的函数

extern "C" void user_terminate()

{

}

// 测试命令响应函数

int Test(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data)

{

AfxMessageBox(_T("Just For Test"));

return 0;

}

// 命令:获取当前模型的名称并显示

int ShowCurrModelName(uiCmdCmdId command,

uiCmdValue *p_value,

void *p_push_command_data)

{

ProError err;

// 获取当前模型

ProMdl mdl;

err = ProMdlCurrentGet(&mdl);

if (PRO_TK_NO_ERROR != err)

{

return -1;

}

// 获取当前模型名称并显示

ProName name;

err = ProMdlNameGet(mdl, name);

MessageBoxW(NULL, name, L"wf5 test", MB_OK);

return 0;

}

// 测试命令 菜单权限函数

// 任何情况下菜单都有效

uiCmdAccessState TestAccess(uiCmdAccessMode access_mode)

{

return ACCESS_AVAILABLE;

/*

ProError err;

ProMode mode;

err = ProModeCurrentGet(&mode);

if (err != PRO_TK_NO_ERROR)

{

return ACCESS_UNAVAILABLE;

}

if (mode == PRO_MODE_PART

|| mode == PRO_MODE_ASSEMBLY)

{

return ACCESS_AVAILABLE;

}

else

{

return ACCESS_UNAVAILABLE;

}

*/

}

// 获取当前模型名称并显示 菜单权限函数

// 只有在当前打开的模型为PART档,ASM档或Drawing档时菜单才有效

uiCmdAccessState ShowCurrModelName_Access(uiCmdAccessMode access_mode)

{

ProError err;

ProMode mode;

err = ProModeCurrentGet(&mode);

if (PRO_TK_NO_ERROR != err)

{

return ACCESS_UNAVAILABLE;

}

if (mode == PRO_MODE_PART

|| mode == PRO_MODE_ASSEMBLY

|| mode == PRO_MODE_DRAWING)

{

return ACCESS_AVAILABLE;

}

else

{

return ACCESS_UNAVAILABLE;

}

}

代码说明:

1. user_initialize()为Pro/TOOLKIT应用程序的入口函数,每个Pro/TOOLKIT程序在被Pro/E加载时,首先执行此函数。

2. user_terminate()是Pro/TOOLKIT程序被Pro/E卸载时执行的函数。

3. ProMenubarMenuAdd为Pro/TOOLKIT程序添加菜单。

4. ProCmdActionAdd为Pro/TOOLKIT程序添加一个命令,一般在添加菜单项时会将命令和菜单项关联,这样在单击菜单项时,就会执行对应的命令。

5. ProMenubarmenuPushbuttonAdd为菜单添加菜单项。

6. 以上代码添加了两个命令:

test — 直接弹出测试对话框。

ShowCurrModelName — 获取当前模型的名称并显示。

五、编译程序

72b6df71b8da3ac3d0361db0fb215d18.png

选择需要编译Win32还是x64版本,以及Debug还是Release版本。

25dcef7b9ef3fa8c745f5a8f00285c46.png

单击【生成】->【生成解决方案】即可编译生成DLL文件:test_wf5.dll。

注意:如果你的VS2008没有安装SP1补丁,编译Debug版本时常会报错,即使编译成功,Pro/E也无法加载生成的test_wf5.dll。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值