野火论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始


查看: 37194|回复: 23

[转贴] 手把手教你开发Pro/TOOLKIT应用程序(一)--转载

[复制链接]

6

主题

111

回帖

-1

威望

助工

Rank: 2

积分
124
QQ
发表于 2015-1-10 08:17 | 显示全部楼层 |阅读模式
本帖最后由 lwsh0289814 于 2015-1-10 10:49 编辑

前言
本教程采用VS2008 + Pro/E Wildfire5.0来讲解怎样开发Pro/TOOLKIT应用程序。
开发Pro/TOOLKIT应用程序时,Pro/E和Visual Studio的版本需对应,否则很难搭建开发环境,其对应关系如下:

&#8226;Wildfire 4.0 <> VS2008
&#8226;Wildfire 5.0 <> VS2008
&#8226;Creo 1.0 <> VS2010
&#8226;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。


2.VS2008
VS2008中文版下载地址:http://pan.baidu.com/s/1ntt7PH3
最好安装下VS2008 SP1补丁,否则编译Debug版本时常会报错。
VS2008 SP1中文版下载地址:http://www.microsoft.com/zh-CN/download/details.aspx?id=13276
如果你需要开发64位的Pro/TOOLKIT程序,请确保安装X64 Compilers and Tools,如下图所示:


二、新建工程
点击【文件】->【新建】->【项目】菜单命令,创建MFC DLL工程。
输入工程名称:test_wf5。



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



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

三、配置工程属性
1.新增64位编译平台
注意:如果只编译32位程序,请跳过此步骤。
单击【生成】->【配置管理器】菜单命令,然后依照下图操作。



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

2.新增头文件路径
单击【项目】->【属性】菜单命令,添加如下头文件路径。
【Pro/E安装目录】\prodevelop\includes
【Pro/E安装目录】\protoolkit\includes
注意:请先选择平台是Win32还是x64。



3.新增库文件路径
32位:
【Pro/E安装目录】\prodevelop\i486_nt\obj
【Pro/E安装目录】\protoolkit\i486_nt\obj



64位:
【Pro/E安装目录】\prodevelop\x86e_win64\obj
【Pro/E安装目录】\protoolkit\x86e_win64\obj



4.添加附加依赖项
mpr.lib
wsock32.lib
psapi.lib
protk_dllmd.lib
prodev_dllmd.lib
netapi32.lib



5.设置工程字符集
推荐优先采用Unicode。



四、添加Pro/TOOLKIT代码
在test_wf5.cpp文件的最后添加以下Pro/TOOLKIT代码。
该段代码的功能是:在Pro/E的【帮助】菜单后新增一个菜单【TestMenu】,然后在【TestMenu】下新增两个菜单项【Test】和【ShowCurrModelName】。分别实现弹出测试对话框和获取当前模型的名称并弹窗显示。
注意:先只要大体理解代码的整体思路即可,本教程会在第三篇:手把手教你开发Pro/TOOLKIT应用程序(三) 中具体阐明代码的所有细节,在学习完本篇和第二篇后,再去学习第三篇会比较好。

// 包含常用头文件
#include <ProToolkit.h>
#include <ProUtil.h>
#include <ProMenuBar.h>
#include <ProMenu.h>
#include <ProMode.h>
#include <ProMdl.h>
#include <ProSolid.h>
#include <ProAsmcomp.h>
#include <ProArray.h>
#include <ProModelitem.h>
#include <ProLayer.h>

// 函数声明
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;
        }
}
// 包含常用头文件#include <ProToolkit.h>#include <ProUtil.h>#include <ProMenuBar.h>#include <ProMenu.h>#include <ProMode.h>#include <ProMdl.h>#include <ProSolid.h>#include <ProAsmcomp.h> #include <ProArray.h>#include <ProModelitem.h>#include <ProLayer.h> // 函数声明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 --- 获取当前模型的名称并显示。
五、编译程序
1.选择需要编译Win32还是x64版本,以及Debug还是Release版本。



2.单击【生成】->【生成解决方案】即可编译生成DLL文件:test_wf5.dll。
注意:如果你的VS2008没有安装SP1补丁,编译Debug版本时常会报错,即使编译成功,Pro/E也无法加载生成的test_wf5.dll。


--------------------------------------------------------------------------------
我思故我存在

46

主题

567

回帖

39

威望

高工

哈哈

Rank: 4

积分
805

希望之星勋章

QQ
发表于 2015-1-10 09:59 | 显示全部楼层
收藏了先,应该还有后续的。
回复 支持 反对

使用道具 举报

6

主题

111

回帖

-1

威望

助工

Rank: 2

积分
124
QQ
 楼主| 发表于 2015-1-10 10:45 | 显示全部楼层
本帖最后由 lwsh0289814 于 2015-1-10 10:48 编辑

在编写信息文件前,首先在工程文件夹下新建Bin文件夹,然后将第五步生成的test_wf5.dll拷贝到Bin文件夹下。



六、编写信息文件
信息文件是用来定义Pro/TOOLKIT程序菜单及菜单项显示信息的文本文件。其内容以四行为一组,每行代表的意义如下:

&#8226;菜单或菜单项的名称
&#8226;菜单或菜单项的英文显示
&#8226;菜单或菜单项的中文显示或其他语言版本的显示
&#8226;#
加载Pro/TOOLKIT程序时,会读取信息文件,并根据菜单或菜单项的名称,匹配出菜单或菜单项的显示字符串。
信息文件必须位于text目录下。
操作步骤如下:

1. 首先在Bin文件夹下新建text文件夹。
2. 然后在text文件夹下新建两个子文件夹:chinese_cn、usascii,分别代表当Pro/E的语言版本为简体中文时,会读取chinese_cn文件夹下的信息文件。当Pro/E的语言版本为英文时,会读取usascii文件夹下的信息文件。
3. 在chinese_cn文件夹下新建如下内容的文本文件:Test_Msg.txt。

TestMenu
Test
测试菜单
#
Test
Test
测试
#
Test_Help
Just For Test
测试
#
ShowCurrModelName
ShowCurrModelName
显示模型名称
#
ShowCurrModelName_Help
Show Current Model Name
显示模型名称
#
TestMenuTest测试菜单#TestTest测试#Test_HelpJust For Test测试#ShowCurrModelNameShowCurrModelName显示模型名称#ShowCurrModelName_HelpShow Current Model Name显示模型名称#
4. 在usascii文件夹下新建如下内容的文本文件:Test_Msg.txt。

TestMenu
Test
#
#
Test
Test
#
#
Test_Help
Just For Test
#
#
ShowCurrModelName
ShowCurrModelName
#
#
ShowCurrModelName_Help
Show Current Model Name
#
#
TestMenuTest##TestTest##Test_HelpJust For Test##ShowCurrModelNameShowCurrModelName##ShowCurrModelName_HelpShow Current Model Name##

七、编写注册文件
注册文件包含Pro/TOOLKIT应用程序的路径,text文件夹的路径等信息,Pro/E通过注册文件中包含的信息,找到Pro/TOOLKIT程序并加载。
在Bin文件夹下新建文本文件protk.dat,并输入如下内容。

name       Test_wf5
startup    dll
exec_file  .\Test_wf5.dll
text_dir   .\
revision   Wildfire
allow_stop TRUE
end
name       Test_wf5startup    dllexec_file  .\Test_wf5.dlltext_dir   .\revision   Wildfireallow_stop TRUEend
含义如下:

&#8226;name:Pro/TOOLKIT应用程序标识名称
&#8226;startup:Pro/TOOLKIT应用程序与Pro/E的交互方式,一般为dll
&#8226;exec_file:Pro/TOOLKIT程序的路径,可以是绝对路径,也可以使相对路径
&#8226;text_dir:text文件夹路径
&#8226;revision:版本
&#8226;allow_stop:是否允许手动终止Pro/TOOLKIT程序
&#8226;end:结束标志
八、自动加载Pro/TOOLKI程序
在Bin文件夹下新建一批处理文件GoProE.bat,输入命令:call [Pro/E全路径]
例如在我的电脑上输入以下命令即可:

call "C:\PTC\proeWildfire 5.0\bin\proe1.bat"
1 call "C:\PTC\proeWildfire 5.0\bin\proe1.bat"

双击GoProE.bat运行,将会启动Pro/E并自动加载我们编写的Pro/TOOLKIT程序。

这是因为我们通过GoProE.bat来启动Pro/E,那么Pro/E的启动目录就为当前的Bin文件夹,Pro/E启动时,会自动读取启动目录下,名为protk.dat的注册文件,来加载Pro/TOOLKIT程序。

九、测试程序
1.单击【测试】菜单项,会弹出以下对话框。

2.新建一档案:零件档、组立档或工程图。单击【显示模型名称】菜单项,会弹出窗口,显示当前模型的名称。


十、手动加载Pro/TOOLKIT程序
我们也可以手动加载Pro/TOOLKIT程序。
在手动加载Pro/TOOLKIT程序之前,我们需要先修改之前创建的注册文件protk.dat。将exec_dir和text_dir指定的相对路径改为绝对路径,否则手动加载时会由于找不到相对路径指定的文件而报错的。
示例如下:

name       Test_wf5
startup    dll
exec_file  D:\WangYao\Test_wf5\Bin\Test_wf5.dll
text_dir   D:\WangYao\Test_wf5\Bin\
revision   Wildfire
allow_stop TRUE
end
name       Test_wf5startup    dllexec_file  D:\WangYao\Test_wf5\Bin\Test_wf5.dlltext_dir   D:\WangYao\Test_wf5\Bin\revision   Wildfireallow_stop TRUEend
通过桌面上的快捷方式来启动Pro/E。单击【工具】->【辅助应用程序】

1.单击【注册】,在弹出的对话框中选择Bin文件夹下的protk.dat文件。
2.选中加载进来的Pro/TOOLKIT程序。
3.单击【启动】。


--------------------------------------------------------------------------------
我思故我存在
回复 支持 反对

使用道具 举报

6

主题

111

回帖

-1

威望

助工

Rank: 2

积分
124
QQ
 楼主| 发表于 2015-1-10 10:48 | 显示全部楼层
这篇主要讲解第一篇中Pro/TOOLKIT代码的具体含义。

Line 1~12
包含Pro/TOOLKIT常用的头文件。

Line 15~24
函数声明。

Line 26~55 user_initialize
user_initialize为Pro/TOOLKIT程序的初始化函数,每个Pro/TOOLKIT程序(DLL)都必须定义该函数。一般在该函数中添加菜单和菜单项。

Line 30~32
定义了宽字符数组变量MsgFile用于存储信息文件的名称:Test_Msg.txt。
ProFamilyName为宽字符(wchar_t)数组。
ProStringToWstring函数将char字符串转换为wchar_t字符串。

Line 35
在Pro/E【帮助】菜单之后添加菜单【TestMenu】。

ProError ProMenubarMenuAdd(
        ProMenuItemName menu_name,
        ProMenuItemLabel untranslated_menu_label,
        ProMenuItemName neighbor,
        ProBoolean add_after_neighbor,
        ProFileName filename);
ProError ProMenubarMenuAdd(        ProMenuItemName menu_name,        ProMenuItemLabel untranslated_menu_label,        ProMenuItemName neighbor,        ProBoolean add_after_neighbor,        ProFileName filename);

&#8226;menu_name:菜单名称,必须唯一。
&#8226;untranslated_menu_label:菜单文本,该文本用于匹配信息文件中的内容。
&#8226;neighbor:相邻的菜单名。"Help"为【帮助】菜单。
&#8226;add_after_neighbor:是否位于相邻菜单的右侧。PRO_B_TRUE表明位于右侧,否则位于左侧。
&#8226;filename:信息文件名。
Line 39~41
添加命令:Test。

ProError ProCmdActionAdd(
        char             *action_name,
    uiCmdCmdActFn     action_cb,
    uiCmdPriority     priority,
    uiCmdAccessFn     access_func,
    ProBoolean        allow_in_non_active_window,
    ProBoolean        allow_in_accessory_window,
    uiCmdCmdId       *action_id); ProError ProCmdActionAdd(        char             *action_name,    uiCmdCmdActFn     action_cb,    uiCmdPriority     priority,    uiCmdAccessFn     access_func,    ProBoolean        allow_in_non_active_window,    ProBoolean        allow_in_accessory_window,    uiCmdCmdId       *action_id);

&#8226;action_name:命令名称,必须唯一。
&#8226;action_cb:命令的响应函数。
&#8226;priority:命令的优先级,一般为uiCmdPrioDefault。
&#8226;access_func:命令的访问权限函数。该函数的返回值关系到和命令关联的菜单项的状态,具体如下:
typedef enum
{
    ACCESS_REMOVE = -1,  // 移除菜单项
    ACCESS_INVISIBLE,    // 菜单项不可见
    ACCESS_UNAVAILABLE,  // 菜单项灰化不可选
    ACCESS_DISALLOW,     // 菜单项不可选
    ACCESS_AVAILABLE     // 菜单项可选
} uiCmdAccessState;
typedef enum{    ACCESS_REMOVE = -1,  // 移除菜单项    ACCESS_INVISIBLE,    // 菜单项不可见    ACCESS_UNAVAILABLE,  // 菜单项灰化不可选    ACCESS_DISALLOW,     // 菜单项不可选    ACCESS_AVAILABLE     // 菜单项可选} uiCmdAccessState;
&#8226;allow_in_non_active_window:是否在非激活窗口中显示命令关联的菜单项,一般为PRO_B_FALSE。
&#8226;allow_in_accessory_window:是否在附属窗口中显示命令关联的菜单项,一般为PRO_B_FALSE。
&#8226;action_id:命令ID。
Line 42~43
添加菜单按钮:Test。

ProError ProMenubarmenuPushbuttonAdd(
        ProMenuItemName         parent_menu,
    ProMenuItemName         push_button_name,
    ProMenuItemLabel        push_button_label,
    ProMenuLineHelp         one_line_help,
    ProMenuItemName         neighbor,
    ProBoolean              add_after_neighbor,
    uiCmdCmdId              action_id,
    ProFileName             filename);
ProError ProMenubarmenuPushbuttonAdd(        ProMenuItemName         parent_menu,    ProMenuItemName         push_button_name,    ProMenuItemLabel        push_button_label,    ProMenuLineHelp         one_line_help,    ProMenuItemName         neighbor,    ProBoolean              add_after_neighbor,    uiCmdCmdId              action_id,    ProFileName             filename);

&#8226;parent_menu:父菜单名。
&#8226;push_button_name:菜单按钮名。
&#8226;push_button_label:菜单按钮文本,用于匹配信息文件中的内容。
&#8226;one_line_help:菜单按钮提示文本,用于匹配信息文件中的内容。
&#8226;neighbor:相邻菜单项名,若为NULL,则添加到父菜单的最后。
&#8226;add_after_neighbor:是否位于相邻菜单项的后面。PRO_B_TRUE表明位于后面,否则位于前面。
&#8226;action_id:关联的命令ID。
&#8226;filename:信息文件名。
Line 46~51
添加命令和菜单按钮:获取当前模型的名称并弹窗显示。
同前,略。

Line 57~59 user_terminate
user_terminate函数为Pro/TOOLKIT应用程序退出时被执行的函数,每个Pro/TOOLKIT程序(DLL)都必须定义该函数。

Line 62~68
命令响应函数:弹出测试对话框。

Line 71~92
命令响应函数:获取当前模型的名称并弹出显示。
ProMdlCurrentGet:获取当前模型,Pro/E中的任何模型,例如:零件档、组立档、工程图、钣金件等,都可以用ProMdl类型来表示。
ProMdlNameGet:获取模型的名称。

Line 96~119
命令访问权限函数。该函数始终返回ACCESS_AVAILABLE,所以菜单项【Test】始终是可见并可执行的。

Line 123~143
命令访问权限函数。
首先通过ProModeCurrentGet获取当前Pro/E的模式,后面的语句表明只有在零件档、组立档或工程图模式下才返回ACCESS_AVAILABLE;也就是说菜单项【ShowCurrModelName】只有在Pro/E有打开零件档、组立档或工程图的情况下才是可见并可选的,否则菜单项会变灰

我思故我存在
回复 支持 反对

使用道具 举报

14

主题

194

回帖

3

威望

工程师

Rank: 3Rank: 3

积分
223
发表于 2015-1-10 14:36 | 显示全部楼层
上传一个整体文件该多好啊,下载也方便
回复 支持 反对

使用道具 举报

6

主题

111

回帖

-1

威望

助工

Rank: 2

积分
124
QQ
 楼主| 发表于 2015-1-12 08:32 | 显示全部楼层
等等,我整整传上来,现在环境不合适 传不上来
回复 支持 反对

使用道具 举报

1

主题

7

回帖

0

威望

实习生

Rank: 1

积分
10
发表于 2015-6-21 22:11 | 显示全部楼层
不错,感谢楼主
回复 支持 反对

使用道具 举报

2

主题

29

回帖

0

威望

实习生

Rank: 1

积分
37
发表于 2015-7-15 23:30 | 显示全部楼层
谢谢楼主,先收藏了
回复 支持 反对

使用道具 举报

1

主题

15

回帖

0

威望

实习生

Rank: 1

积分
18
发表于 2015-7-30 10:59 | 显示全部楼层
我原来机子上可以加载这个辅助程序,现在换了一台电脑,加载不了,我vs2008也安装,请问一下,我哪里出了问题,谢谢

报错对话框

报错对话框
回复 支持 反对

使用道具 举报

6

主题

111

回帖

-1

威望

助工

Rank: 2

积分
124
QQ
 楼主| 发表于 2015-8-26 15:31 | 显示全部楼层
beijikuoda 发表于 2015-7-30 10:59
我原来机子上可以加载这个辅助程序,现在换了一台电脑,加载不了,我vs2008也安装,请问一下,我哪里出了问 ...

不好意思刚看见,你看看,你编译是不是出错了?这个一般都是编译没通过出现的错误
我思故我存在
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站为非营利性站点,部分资源为网友搜集或发布,仅供学习和研究使用,如用于商业用途,请购买正版。站内所发布的资源,如有侵犯你的权益,请联系我们,本站将立即改正或删除。

QQ|手机版|小黑屋|野火论坛(©2007~2024) ( 苏ICP备11036728号-2 )苏公网安备 32039102000103号

GMT+8, 2024-4-25 18:07 , Processed in 0.131631 second(s), 28 queries .

快速回复 返回顶部 返回列表