
單擊【确定】,然後在彈出的對話框中單擊【下一步 >】
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。
VS2008最好安裝下VS2008 SP1更新檔,否則編譯Debug版本時常會報錯。
如果你需要開發64位的Pro/TOOLKIT程式,請確定安裝X64 Compilers and Tools,如下圖所示:
點選【檔案】->【建立】->【項目】菜單指令,建立MFC DLL工程。
輸入工程名稱:test_wf5。
單擊【确定】,然後在彈出的對話框中單擊【下一步 >】
DLL類型:使用共享 MFC DLL
單擊【完成】完成建立工程。
三、配置工程屬性新增64位編譯平台
注意:如果隻編譯32位程式,請跳過此步驟。
單擊【生成】->【配置管理器】菜單指令,然後依照下圖操作。
如果沒有x64選項,那說明安裝VS2008時,沒有安裝X64 Compilers and Tools,重新安
裝此選項即可。
2.新增頭檔案路徑
單擊【項目】->【屬性】菜單指令,添加如下頭檔案路徑。
【Pro/E安裝目錄】prodevelopincludes
【Pro/E安裝目錄】protoolkitincludes
注意:請先選擇平台是Win32還是x64。
新增庫檔案路徑
32位:
【Pro/E安裝目錄】prodevelopi486_ntobj
【Pro/E安裝目錄】protoolkiti486_ntobj
64位:
【Pro/E安裝目錄】prodevelopx86e_win64obj
【Pro/E安裝目錄】protoolkitx86e_win64obj
添加附加依賴項
mpr.lib
wsock32.lib
psapi.lib
protk_dllmd.lib
prodev_dllmd.lib
netapi32.lib
設定工程字元集
推薦優先采用Unicode。
在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;
}
// 擷取目前模型名稱并顯示 菜單權限函數
// 隻有在目前打開的模型為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 — 擷取目前模型的名稱并顯示。
五、編譯程式選擇需要編譯Win32還是x64版本,以及Debug還是Release版本。
單擊【生成】->【生成解決方案】即可編譯生成DLL檔案:test_wf5.dll。
注意:如果你的VS2008沒有安裝SP1更新檔,編譯Debug版本時常會報錯,即使編譯成功,Pro/E也無法加載生成的test_wf5.dll。